怎样检查是否获得shizuku权限?
autojs.isRootAvailable()可以检查是否获得root权限。 那么shizuku呢?
我尝试 var isShizukuAble=false; try { shizuku("date"); isShizukuAble=true; } catch (e) { isShizukuAble=false; } if(isShizukuAble){ log('已获得Shizuku授权'); }else { log('未获得Shizuku授权'); }
shizuku()函数能执行成功,就表示拥有shizuku权限。 但异常并不能如愿成功拦截。
没有shizuku的时候,报错: 调用方法 "shizuku" 失败: [ 缺少 Shizuku 访问权限 ] java.lang.RuntimeException: 调用方法 "shizuku" 失败: [ 缺少 Shizuku 访问权限 ]
catch无效了!
另外,我尝试使用sui面具模块,代替shizuku给AutoJs6授权,能够授权成功。 但是依旧无法调用shizuku()函数。
shizuku.isRunning()或者shizuku.running。
---原始邮件--- 发件人: @.> 发送时间: 2025年3月29日(周六) 晚上7:26 收件人: @.>; 抄送: @.@.>; 主题: Re: [SuperMonster003/AutoJs6] 怎样检查是否获得shizuku权限? (Issue #345)
shizuku.isRunning()或者shizuku.running。
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***> vtrayy left a comment (SuperMonster003/AutoJs6#345)
shizuku.isRunning()或者shizuku.running。
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>
感谢,实测,shizuku和sui都有效。
shizuku.isRunning()没有授权会抛异常,不过能捕获。
最后使用了shizuku.running,不会抛异常
console.log(shizuku.isRunning()); // Shizuku 服务是否正在运行
console.log(shizuku.hasPermission()); // AutoJs6 是否被 Shizuku 授予了使用权限
console.log(shizuku.isOperational()); // AutoJs6 是否可以正常使用 Shizuku 服务 (既有正在运行的 Shizuku 服务, 又获得了 Shizuku 的使用权限)
至于无法使用 try..catch 块捕获 shizuku 方法异常的问题, 下一版本将尝试修复.
请问,投影媒体权限、后台弹出界面权限有判断方法吗? 我目前是这样写的:借助APPops ` // 投影媒体权限 importClass(android.app.AppOpsManager);
function checkProjectionPermission() {
let appOps = context.getSystemService(context.APP_OPS_SERVICE);
let mode = appOps.checkOpNoThrow("android:project_media", android.os.Process.myUid(), context.getPackageName());
return mode == AppOpsManager.MODE_ALLOWED;
}
if (checkProjectionPermission()) {
log("投影媒体权限,[已启用]");
} else {
toast("投影媒体权限,[未启用]!");
console.error("投影媒体权限,[未启用]!");
console.error("脚本无法全自动完成所有流程!");
sleep(3000);
}
`
然后弹出界面权限不同品牌的手机还略有差别
` // 后台弹出界面权限 // 获取设备制造商 var manufacturer = android.os.Build.MANUFACTURER; / importClass(android.app.AppOpsManager); importClass(android.os.Build); importClass(android.net.Uri); importClass(android.content.pm.PackageManager); importClass(android.os.Process);
function checkBackgroundStartPermission() {
try {
if (manufacturer === "Xiaomi") {
let appOps = context.getSystemService(context.APP_OPS_SERVICE);
return appOps.checkOpNoThrow(10021, Process.myUid(), context.getPackageName()) == AppOpsManager.MODE_ALLOWED;
} else if (manufacturer === "Vivo") {
let uri = Uri.parse("content://com.vivo.permissionmanager.provider.permission/start_bg_activity");
let cursor = context.getContentResolver().query(uri, null, "pkgname = ?", [context.getPackageName()], null);
if (cursor != null && cursor.moveToFirst()) {
let state = cursor.getInt(cursor.getColumnIndex("currentstate"));
cursor.close();
return state == 0;
}
return false;
} else if (manufacturer === "Oppo") {
return context.getPackageManager().checkPermission("android.permission.SYSTEM_ALERT_WINDOW", context.getPackageName()) == PackageManager.PERMISSION_GRANTED;
} else {
let appOps = context.getSystemService(context.APP_OPS_SERVICE);
return appOps.checkOpNoThrow(AppOpsManager.OPSTR_START_FOREGROUND, Process.myUid(), context.getPackageName()) == AppOpsManager.MODE_ALLOWED;
}
} catch (e) {
return false;
}
}
if (checkBackgroundStartPermission()) {
console.log("后台弹出界面权限,[已启用]");
} else {
console.error("后台弹出界面权限,[未启用]!");
toast("后台弹出界面权限,[未启用]!");
console.error("功能受限,可能无法顺利完成全部流程!");
console.error("应用详情→权限管理→其它权限→后台弹出界面");
notice(String("功能受限!(" + nowDate().substr(5, 14) + ")"),
String("缺少'后台弹出界面'权限,\n权限管理→其它权限→后台弹出界面"));
sleep(3000);
}
`