accessibility service概念
“信息无障碍”起源于西方发达国家,译自Accessibility,指任何人在任何情况下都能平等、方便、无障碍地获取信息并利用信息。在Android里,accessiblity service的目的主要用来协助有身体缺陷的用户使用android设备和应用。
Android有自带的accessibility功能,如talkback。但其作用域只在系统自带的软件。同时,开发者也可以通过继承AccessiblityService类为自己的应用自定义accessibility功能。
运行机制
accessiblity service在后台运行,并由用户的行为产生的AccessibilityEvents触发service的回调方法。这些AccessibilityEvents可以是视图焦点变化、按钮被点击和界面滚动等。
生命周期
- 启动:
当带有accessiblity service的应用在Android设备安装后,可通过设备里设置-->无障碍服务 为应用开启服务。开后,Service的onCreate(),onServiceConnection()的方法会被先后调用。开发者可在这些方法进行一些初始化动作。 - 运行
服务启动后,用户行为触发的AccessibilityEvents会回调服务的onAccessibilityEvent(AccessibilityEvent event) 的方法。 - 结束
当用户通过设备里设置-->无障碍服务 为应用关闭服务后,服务便终止。通过AccessiblityService的disableSelf()方法也可以终止服务.
声明与配置
- 声明
AccessiblityService需要在AndroidManifest.xml中进行声明,一是通过BIND_ACCESSIBILITY_SERVICE让系统识别出这是个无障碍服务,二是为了声明该服务用于处理的Intent类型。
<service android:name=".MyAccessibilityService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
. . .
</service>
- 配置
配置的目的主要是设置该accessibilityservice用于哪个应用、处理哪种事件和获取事件的时间间隔等。
配置有两种方式,一是通过XML文件配置,如:
<service android:name=".MyAccessibilityService">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data android:name="android.accessibilityservice" android:resource="@xml/accessibilityservice" />
</service>
二是通过代码setServiceInfo(AccessibilityServiceInfo)配置。
网友评论