AccessibilityService设计初衷在于帮助残障用户使用android设备和应用,在后台运行,可以监听用户界面的一些状态转换,例如页面切换、焦点改变、通知、Toast等,并在触发AccessibilityEvents时由系统接收回调。后来被开发者另辟蹊径,用于一些插件开发,比如微信红包助手,还有一些需要监听第三方应用的插件。
最好的资料:官方文档
生命周期
AccessbilityService的生命周期由系统专门管理,并遵循Service的基本生命周期,它只能由用户自己在设置中手动启动,系统绑定到服务后,会调用它的onServiceConnected()方法。
当用户手动在设置中关闭服务,或者开发者调用disableSelf()方法时,该服务会被关闭销毁。
基本配置
继承AccessbilityService
class AliAccessibilityService : AccessibilityService() {
private val TAG = "AliAccessibilityService"
//服务中断时的回调
override fun onInterrupt() {
Log.d(TAG, "onInterrupt")
}
//接收到系统发送AccessibilityEvent时的回调
override fun onAccessibilityEvent(event: AccessibilityEvent) {
Log.d(TAG, "onAccessibilityEvent:event:$event")
}
}
AccessbilityService本质上还是一个Service,所以要在AndroidManifest中注册该服务
android:name=".AliAccessibilityService"
android:label="支付测试"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"是为了确保只有系统可以绑定该服务。
配置你需要监听的事件类型、要监听哪个程序,最小监听间隔等属性。这里有两种方式可以进行配置,一种是在manifest中通过meta-data配置,一种是在代码中通过setServiceInfo(AccessibilityServiceInfo)设置。
方式一:通过meta-data设置
android:name=".AliAccessibilityService"
android:label="支付测试"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
android:name="android.accessibilityservice"
android:resource="@xml/accessible_service_config_ali" />
accessible_service_config_ali.xml
android:accessibilityEventTypes="typeWind