使用 root权限自动打开无障碍
有些操作需要用到无障碍。在已经获取root的情况下是可以自动打开的。无需用户手动操作。
- 第一步:获取应用的无障碍路径
路径规则为:<包名>/<无障碍类名>
以下是示例:
com.yzy.pokuni/com.yzy.pokuni.service.AppAccessibilityService
斜杠左边是包名,右边是无障碍服务的完整类路径。
另一种方法是使用命令行自动获取类路径。先打开手机的无障碍,并开启对应的app的服务 ,然后在shell下执行以下命令:
rk3399:/ # settings get secure enabled_accessibility_services
com.yzy.pokuni/com.yzy.pokuni.service.AppAccessibilityService
rk3399:/ #
如上,他会输出当前已打开的无障碍的服务列表。找到自己app的即可
- 第二步:开启
利用上面的路径,在 app 内使用root权限执行shell 命令即可:
settings put secure enabled_accessibility_services com.yzy.pokuni/com.yzy.pokuni.service.AppAccessibilityService
settings put secure accessibility_enabled 1
最末尾是需要开启的无障碍路径
补充
使用 adb shell 也可以授予 app 安全权限, 从而可以在软件内自动打开无障碍:
具体可见:adb授予无障碍权限
//自动开启无障碍服务
fun autoOpenAccessibilityService(context: Context, classPath: String) {
Settings.Secure.putString(
context.contentResolver,
Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
classPath
)//例子:"com.xxx.xxxx/com.xxx.xxxx.service.MyAccessibilityService"
Settings.Secure.putString(
context.contentResolver,
Settings.Secure.ACCESSIBILITY_ENABLED, "1"
)
}
//自动关闭无障碍服务
fun autoCloseAccessibilityService(context: Context, classPath: String) {
Settings.Secure.putString(
context.contentResolver,
Settings.Secure.ACCESSIBILITY_ENABLED,
classPath
)//例子:"com.xxx.xxxx/com.xxx.xxxx.service.MyAccessibilityService"
Settings.Secure.putString(
context.contentResolver,
Settings.Secure.ACCESSIBILITY_ENABLED, "0"
)
}
使用上方的两个方法的前提是授予权限:android.permission.WRITE_SECURE_SETTINGS
,可使用 adb 或 root 权限授予