为没有无障碍设置的安卓设备打开无障碍
本文作者 GenshinMinecraft
,首发于 本博客,同时发布于其他论坛
前言
前几天心血来潮,想着给某个安卓设备上个 流体手势导航,其需要无障碍权限以i实现功能
可是,该安卓设备阉割了原生安卓设置 com.android.settings
的所有与无障碍权限有关的东西,即使在 隐藏的设置项
中寻找也无果,手动通过 ADB / Root 触发无障碍设置的 Activity 也没用
解决
经过搜寻,可以直接在 ADB Shell / Root Shell 中用安卓自带的 settings
命令来修改系统设置
首先,使用 ADB 连接至你的安卓设备 (如果其拥有 Root,可直接在设备上的终端执行下列命令且无需前缀 adb shell
)
❯ adb devices
List of devices attached
202304050046 device
然后,使用命令打开无障碍服务的总开关:
adb shell settings put secure accessibility_enabled 1
随后,用命令获取所有已经打开的无障碍权限
adb shell settings get secure enabled_accessibility_services
这里输出空白属于正常情况,即代表目前没有任何已经打开的无障碍权限
有的设备制造商会默认开启部分的无障碍服务,在这里会输出所有的无障碍 Services,以冒号 :
分割,如果需要添加,务必在原有的基础上加上冒号再填入需要打开的 Services
在这之前,我们还需要找到需要打开的应用的无障碍 Services,我们可以用下面的方法来寻找:
adb shell dumpsys package com.fb.fluid \| grep com.fb.fluid/
在其中,你需要将 com.fb.fluid
更改为无障碍应用的包名,管道符号需要转义
输出大概长这样:
787272a com.fb.fluid/.ui.ActivitySettings filter fe2980
787272a com.fb.fluid/.ui.ActivitySettings filter 5dcdbb9
fe86646 com.fb.fluid/.PauseFNGActivity filter 3ca46b2
5411007 com.fb.fluid/.ResumeFNGActivity filter e568603
cfe68eb com.fb.fluid/com.joaomgcd.taskerpluginlibrary.condition.BroadcastReceiverCondition filter 6dc5dac
aa8c49e com.fb.fluid/.BootReceiver filter 4121bfe
be2268b com.fb.fluid/com.joaomgcd.taskerpluginlibrary.action.BroadcastReceiverAction filter 4b17f5f
f4e01fa com.fb.fluid/com.joaomgcd.taskerpluginlibrary.condition.IntentServiceCondition filter 61bacd6
bc9c5e5 com.fb.fluid/.services.MyTileService filter 298b27b permission android.permission.BIND_QUICK_SETTINGS_TILE
1aa036c com.fb.fluid/com.joaomgcd.taskerpluginlibrary.action.IntentServiceAction filter 7b148f1
6a97159 com.fb.fluid/.ServiceNotificationListener filter 787a898 permission android.permission.BIND_NOTIFICATION_LISTENER_SERVICE
b7b311c com.fb.fluid/.MainAccessibilityService filter f667a75 permission android.permission.BIND_ACCESSIBILITY_SERVICE
412a125 com.fb.fluid/.CapacitiveKeysService filter 36ffa0a permission android.permission.BIND_ACCESSIBILITY_SERVICE
com.fb.fluid/androidx.lifecycle.ProcessLifecycleOwnerInitializer:
Provider{db191eb com.fb.fluid/androidx.lifecycle.ProcessLifecycleOwnerInitializer}
com.fb.fluid/androidx.core.content.FileProvider:
Provider{16016f3 com.fb.fluid/androidx.core.content.FileProvider}
Provider{16016f3 com.fb.fluid/androidx.core.content.FileProvider}
Provider{db191eb com.fb.fluid/androidx.lifecycle.ProcessLifecycleOwnerInitializer}
我们需要在里面找到有 Accessibility
/ Main
/ Service
字样的字段,这里为 com.fb.fluid/.MainAccessibilityService
不同的软件会有不同的 Service 名字,请仔细寻找
或者最简单的方式,就是在其他正常的安卓设备 安装并打开无障碍应用的权限,再用 adb shell settings get secure enabled_accessibility_services
获取即可
最后,使用命令打开其无障碍的 Services 即可:
adb shell settings put secure enabled_accessibility_services com.fb.fluid/.MainAccessibilityService
记得把 com.fb.fluid/.MainAccessibilityService
替换为上面获取到的 Services,如果有多个 Services 还要使用 :
分割
小结
就这样吧,主要的命令就几个:
adb shell settings put secure accessibility_enabled 1
adb shell settings get secure enabled_accessibility_services
adb shell settings put secure enabled_accessibility_services com.fb.fluid/.MainAccessibilityService