检测AccessibilityService输入事件可以从多个维度进行。首先通过AccessibilityManager的isEnabled()方法检测是否有无障碍服务在运行;然后通过getEnabledAccessibilityServiceList获取已启用服务列表,读取其服务ID(包名/类名格式)进行识别;接着检查服务的capabilities属性,判断是否同时具备CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT(读取屏幕)和CAPABILITY_CAN_PERFORM_GESTURES(操作应用)的双重能力。此外在Android S及以上版本,还可以通过检查MotionEvent的flags中是否包含FLAG_IS_ACCESSIBILITY_EVENT(0x800)来直接判断事件是否由无障碍服务产生。需注意视障用户也使用无障碍服务,需综合判断避免误伤。




