对于一个依赖无障碍服务的应用来说,App关闭的时候就会关闭无障碍服务权限,以至于每次启动都需要去手动打开一次无障碍服务,这无疑会让人很抓狂.但是这对于用户来说这又是安全的,否则各种流氓岂不是可以随意操控你的手机了,有限制才会有安全...
今天的这篇文章呢,是利用一个系统的权限
android.permission.WRITE_SECURE_SETTINGS
这个权限对于开发安装的人来说,都应该明白,如果我们直接在AndroidMainifast.xml中声明,会报错,原因就是我们不是系统应用,属于第三方,所以没有权限使用这个权限.但是如果我们使用adb调试来针对某一个app来授权,那就可以拿到这个权限了,授权的命令为:
adb shell pm grant PACKAGE_NAME android.permission.WRITE_SECURE_SETTINGS
其中PACKAGE_NAME为你要授权的应用包名.例如: org.autojs.autojspro
adb命令如何安装到你的电脑上,如何使用我就不教了,自行百度吧.其他的废话,我也不多说了,直接上我们今天的脚本代码.
importClass(android.content.Context);
importClass(android.provider.Settings);
importClass(android.content.pm.PackageManager);
if (!checkSelfPermission("android.permission.WRITE_SECURE_SETTINGS")) {
toastLog("出错了,请查看日志界面内容");
console.error("\\n您没有为autojs/autojsPro授予WRITE_SECURE_SETTINGS权限!\\n"+
"授权方法: 您需要打开USB调试并连接一台电脑,使用adb命令给autojs授权,命令为:\\n"+
"adb shell pm grant "+context.getPackageName()+" android.permission.WRITE_SECURE_SETTINGS");
setClip("adb shell pm grant "+context.getPackageName()+" android.permission.WRITE_SECURE_SETTINGS");
toastLog("命令已写入到剪贴板");
exit();
}
if (auto.service == null) {
//这里没有启动无障碍服务 这里我启动了autojs免费版和pro版的无障碍服务
try {
var enabledServices = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);
var Services = enabledServices + ":org.autojs.autojspro/com.stardust.autojs.core.accessibility.AccessibilityService"+
":org.autojs.autojs/com.stardust.autojs.core.accessibility.AccessibilityService";
Settings.Secure.putString(context.getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, Services);
Settings.Secure.putString(context.getContentResolver(), Settings.Secure.ACCESSIBILITY_ENABLED, '1');
} catch (e) {
toastLog("您没有为autojs/autojsPro授予WRITE_SECURE_SETTINGS权限");
exit();
}
}
/**
* 检查自身是否开启某权限
* @param {string} permission 权限名称
*/
function checkSelfPermission(permission) {
return context.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED
}
全部0条评论
快来发表一下你的评论吧 !