代码开启无障碍服务
定义的AccessibilityService默认是关闭的,需要在无障碍界面手动打开或者自动启动。 目前有两种方式可以自动启动改服务。需要修改源码或配置应用为系统应用。
1、源码中修改 frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java 在loadSecureSettings函数中添加如下代码: loadSetting(stmt, Settings.Secure.ACCESSIBILITY_ENABLED, 1); loadSetting(stmt, Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,“你定义的服务”); “你定义的服务”填写的格式:com.125la.main/com.125la.service.MyAccessibilityService
2、系统应用并在系统中编译 在AndroidManiferst.xml中声明权限需求
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
在APP启动入口处添加:
Settings.Secure.putString(getContentResolver(),Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,"你定义的服务");
Settings.Secure.putInt(getContentResolver(),Settings.Secure.ACCESSIBILITY_ENABLED, 1);
“你定义的服务”填写的格式:pkgname/classname
1表示开启,0表示关闭
关闭无障碍的代码
Settings.Secure.putString(getContentResolver(),Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,"");
Settings.Secure.putString(getContentResolver(),Settings.Secure.ACCESSIBILITY_ENABLED, 0);
3、总结: 我试过两个方法,第二个方法出现些小问题,比如第一次烧录系统后和恢复出厂设置后出现无法监听,其他情况下是可以的。
参考文章 android查看自启动服务,AccessibilityService自启动 代码开启无障碍服务-系统应用
|