1、在无障碍中开启APP服务的权限以后会在Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES(即:enabled_accessibility_services)中出现这个APP的包名和服务名。
2、使用命令查看APP的包名和服务名:adb shell settings get secure enabled_accessibility_services,如果无障碍中没有开启APP的服务权限使用命令是读取不出东西的。
3、使用adb命令直接开启APP在无障碍中的服务权限:adb shell settings put secure enabled_accessibility_services com.iflytek.reading/com.iflytek.reading.app.NavigationAccessibilityService
4、如果要使用命令一次性开启多个APP在无障碍中的服务权限需要在第一个APP
的包名和服务名后的后面使用英文冒号进行拼接。
例如:adb shell settings put secure enabled_accessibility_services com.iflytek.inputmethod/com.iflytek.depend.accessibility.FlyIMEAccessibilityService:com.iflytek.reading/com.iflytek.reading.app.NavigationAccessibilityService
注意:一次性开启多个APP在无障碍中的服务权限不能使用命令一条一条的设置,因为这样子操作的话后面设置进去的会把前面设置好的覆盖掉。
5、在Android系统源码中实现的话可以打入下面的补丁,直接把数据写入到数据库中
frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java
loadBooleanSetting(stmt, Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS,
R.bool.def_lock_screen_allow_private_notifications);
loadIntegerSetting(stmt, Settings.Secure.SLEEP_TIMEOUT,
R.integer.def_sleep_timeout);
+loadSetting(stmt,Settings.Secure.ACCESSIBILITY_ENABLED,1);
+// 指定apk的包名和服务名,需要开启多个APP的无障碍权限需要用英文的冒号进行拼接
+loadSetting(stmt, Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, “com.iflytek.inputmethod/com.iflytek.depend.accessibility.FlyIMEAccessibilityService:com.iflytek.reading/com.iflytek.reading.app.NavigationAccessibilityService”);
6、想在第三方APP中实现的话可以使用下面的代码,使用方法一的弊端是需要获取系统权限进行系统签名。
方法一:
Settings.Secure.putString(getApplicationContext().getContentResolver(), “enabled_accessibility_services”, “com.iflytek.inputmethod/com.iflytek.depend.accessibility.FlyIMEAccessibilityService”);
方法二:直接使用代码执行adb命令的操作。