什么是安卓無障礙服務
無障礙服務( Accessibility Service)是一個應用程序,它給有殘疾的用戶或暫時無法與設備完全交互的用戶提供了更好的無障礙用戶交互功能。
比如駕駛、照顧小孩或者在吵鬧的派對上可能需要額外或者替代的交互反饋。
Android提供了標准的無障礙服務,包括TalkBack,開發人員可以創建和發布自己的無障礙服務。 Android從1.6(API 4)開始引入了構建和部署無障礙服務的能力,並在Android 4.0(API 14)進行了重大改進。Android Support Library在Android 4.0版本上增加了支持增強無障礙服務功能,這樣就能夠兼容到Android 1.6。Android鼓勵開發者使用Support Library來廣泛兼容無障礙服務,並針對Android 4.0中引入的更高級的無障礙服務功能進行開發。
Accessibility Service是Android官方給出的一個無障礙輔助的API,可以實現一系列Android自動化行為,諸如自動化測試、自動搶紅包、自動安裝應用、清理系統運存、劫持瀏覽器等等。
Auto.js Pro基於控件的操作依賴於無障礙服務,因此最好在腳本運行開始時,確保無障礙服務已經啟用。如果運行到某個需要權限的語句無障礙服務並沒啟動,則會拋出異常並跳轉到無障礙服務界面。這樣的用戶體驗並不友好。出現這種情況,需要重新運行腳本。
本節課提供一種完美的Auto.js Pro無障礙服務解決方案。
開發文檔
課程內容
- 檢測與開啟無障礙服務
UI界面無障礙服務開關
<card w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" gravity="center_vertical">
<vertical padding="18 8" h="auto">
<linear>
<Switch id="autoService" text="無障礙服務:" checked="{{auto.service != null}}" w="auto" textStyle="bold" />
</linear>
</vertical>
<View bg="#E51400" h="*" w="5" />
</card>
無障礙服務開關的事件掛接:
ui.autoService.on("check", function(checked) {
// 用戶勾選無障礙服務的選項時,跳轉到頁面讓用戶去開啟
if(checked && auto.service == null) {
app.startActivity({
action: "android.settings.ACCESSIBILITY_SETTINGS"
});
}
if(!checked && auto.service != null){
auto.service.disableSelf();
}
});
// 當用戶回到本界面時,resume事件會被觸發
ui.emitter.on("resume", function() {
// 此時根據無障礙服務的開啟情況,同步開關的狀態
ui.autoService.checked = auto.service != null;
});
判斷與提示開啟無障礙服務:
//程序開始運行之前判斷無障礙服務
if (auto.service == null) {
toastLog("請先開啟無障礙服務!");
return;
};
按音量上鍵停止腳本:
// 屏蔽音量鍵調節聲音 events.setKeyInterceptionEnabled("volume_up", true); //啟用按鍵監聽 events.observeKey(); //監聽音量鍵按下 events.onKeyDown("volume_up", () => { toastLog('按音量鍵停止'); exit(); });