什么是安卓无障碍服务

无障碍服务( 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();
});