accessibility service概念
“信息無障礙”起源于西方發(fā)達國家,譯自Accessibility,指任何人在任何情況下都能平等、方便、無障礙地獲取信息并利用信息。在Android里,accessiblity service的目的主要用來協(xié)助有身體缺陷的用戶使用android設備和應用。
Android有自帶的accessibility功能,如talkback。但其作用域只在系統(tǒng)自帶的軟件。同時,開發(fā)者也可以通過繼承AccessiblityService類為自己的應用自定義accessibility功能。
運行機制
accessiblity service在后臺運行,并由用戶的行為產(chǎn)生的AccessibilityEvents觸發(fā)service的回調(diào)方法。這些AccessibilityEvents可以是視圖焦點變化、按鈕被點擊和界面滾動等。
生命周期
- 啟動:
當帶有accessiblity service的應用在Android設備安裝后,可通過設備里設置-->無障礙服務 為應用開啟服務。開后,Service的onCreate(),onServiceConnection()的方法會被先后調(diào)用。開發(fā)者可在這些方法進行一些初始化動作。 - 運行
服務啟動后,用戶行為觸發(fā)的AccessibilityEvents會回調(diào)服務的onAccessibilityEvent(AccessibilityEvent event) 的方法。 - 結(jié)束
當用戶通過設備里設置-->無障礙服務 為應用關(guān)閉服務后,服務便終止。通過AccessiblityService的disableSelf()方法也可以終止服務.
聲明與配置
- 聲明
AccessiblityService需要在AndroidManifest.xml中進行聲明,一是通過BIND_ACCESSIBILITY_SERVICE讓系統(tǒng)識別出這是個無障礙服務,二是為了聲明該服務用于處理的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)配置。