Android 用 AccessibilityService 做钉钉自动签到
在移动办公里,自动化签到这类需求一直都在。Android 提供的 AccessibilityService 能读到当前窗口的节点信息,也能做点击、返回这类交互,所以常被拿来做 UI 自动化。这里我把方案整理成一个比较直接的实现:用来电广播唤起目标应用,再由无障碍服务按状态机完成进入主页、找到签到入口、处理弹窗并点击签到。
方案拆分
整个流程其实就三件事:
BroadcastReceiver负责监听电话状态,条件满足时启动钉钉并打开无障碍服务。AccessibilityService负责查找页面节点,模拟点击。- 一个简单的状态机负责把'主页 -> 工作页 -> 签到页 -> 完成'串起来。
这种写法不花哨,但够稳。比起把所有逻辑堆在一起,分开以后更容易调试,页面变了也知道该从哪一段下手。
权限和清单配置
AndroidManifest.xml 里要先把权限和服务声明好。电话状态读取、来电广播监听、无障碍服务绑定,这几项缺了就跑不起来。
<!-- 读取手机状态权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 处理拨出电话权限 -->
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<!-- 绑定无障碍服务权限 -->
<uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" />
组件注册也要一起配上。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.dingsign">
<!-- 广播接收器:监听电话状态 -->
<receiver android:name=".PhoneReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
< = />


