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