检测AccessibilityService产生的非人操作可以从两个维度入手:
环境状态检测:
- 检测是否存在正在运行的无障碍服务:通过
AccessibilityManager.isEnabled()判断 - 读取无障碍服务ID:获取已启用服务列表,识别非系统服务的包名
- 检测是否具备全控能力:判断服务是否同时拥有
CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT(读取屏幕)和CAPABILITY_CAN_PERFORM_GESTURES(操作应用)两项能力
事件特征检测:
- 检查MotionEvent的flags标志位,Android 12及以上版本可通过
FLAG_IS_ACCESSIBILITY_EVENT(0x800)标志位判断事件是否由无障碍服务产生
需要注意的是,特殊人群(如视障用户)也在正常使用无障碍服务,简单通过特征值分析可能造成误判。建议结合多维度信息综合判断,而非仅依赖单一检测结果。