无障碍服务如何替你点屏幕:模拟点击的工作原理
安卓不允许普通应用替人点屏幕
安卓系统的安全设计里,一个普通应用不能凭空向别的应用发送触摸事件——否则任何应用都能乱点你的手机。系统只对无障碍服务(Accessibility Service)开放了模拟触控的能力,因为这类服务原本的用途是帮助操作不便的用户使用手机。
所以 Auto Clicker 的每一次点击,本质上都是它以无障碍服务的身份,向系统提交一条「在这个坐标执行一次点击」的指令。对被点击的应用来说,这条指令和真人手指按下几乎没有区别。
两项权限各管一件事
| 权限 | 在系统设置里的名字 | 负责什么 | 缺了会怎样 |
|---|---|---|---|
| 无障碍服务 | 无障碍 / 已下载的应用 | 执行模拟点击与滑动 | 面板在、按了播放却一下不点 |
| 悬浮窗权限 | 显示在其他应用的上层 | 把控制面板叠在别的应用上面 | 应用里点了开始,屏幕上什么都没出现 |
一个形象的类比:无障碍服务是「手」,悬浮窗权限是「遥控器」。手没了,遥控器按了也没用;遥控器没了,你根本找不到地方按。两项权限的开启步骤和常见故障,分别写在两项权限缺一不可和按了播放没反应里。
这套机制的隐私边界
无障碍服务在系统设计上可以读取屏幕内容——这是所有使用该权限的应用共有的属性,不是这一款应用的特殊行为。开发者在 Google Play 商店页的数据安全声明中说明:不与第三方共享数据;该权限仅用于实现模拟点击与滑动的核心功能。是否放心由你自己判断,一份无障碍权限的自查方法教你在系统里核对谁持有这项权限。
为什么屏幕一灭就停
模拟点击需要有一个真实的屏幕作为作用对象。屏幕熄灭后,点击指令依然会发出,但没有任何东西被点亮,等于对空气按键。这就是为什么挂机场景总要把屏幕常亮打开,具体做法见灭屏后点击就失效。