图色脚本权限冲突
问题概述
当图色脚本与系统截图权限(如云控投屏或其他截图类应用)同时使用时,可能会出现以下问题:
- 截图失败 - 无法获取屏幕图像
- 权限冲突 - 多个应用争夺截图权限
- 功能异常 - 投屏或脚本运行不稳定
根本原因
系统截图通道独占性:Android 系统的截图权限在同一时间只能被一个应用占用,无法多应用共享。
系统截图方式需要申请截图权限,会和云控的远程投屏权限冲突。
如果只运行脚本、不投屏,可以使用系统截图权限方式,速度快且性能稳定,系统截图 API 文档
// 请求截图权限
let captureStatus = requestScreenCapture();
if (!captureStatus) {
toastLog("截图权限被拒绝,请手动授权");
exit();
} else {
toastLog("截图权限已获取,开始截图当前手机屏幕...");
var img = captureScreen();
console.log(img); // 截图返回 Image 对象
}
解决方案
方案一:避免权限冲突
- 单一应用原则
- 确保同一时间只有一个应用使用系统截图权限
- 图色脚本运行时,暂停其他截图类应用
- 权限管理
- 合理安排脚本和投屏的使用时段。例如,在跑图色脚本时避免远程投屏;可以开启远程实时日志 ,即使不投屏,也能通过日志了解脚本执行情况。
方案二:替代截图方式(推荐)
了解更多截图方式请参阅: 屏幕截图的 7 种方式
根据您启用的自动化模式,选择以下兼容性更好的截图方案:
HID 截图
特点:兼容性好,速度较慢
// 截图返回 Image 对象
console.log("HID截图: ", $hid.captureScreen());
// 截图保存至指定路径
console.log("保存截图: ", $hid.captureScreen("/sdcard/screenshot.png"));
无障碍截图
特点:速度较慢
// Android 11+ 推荐
console.log("无障碍截图(Android 11+): ", $automator.takeScreenshot());
数字助理截图(推荐)
特点:系统级权限,稳定性高,速度快
// 获取截图对象
console.log("数字助理截图: ", $assistant.captureScreen());
// 保存截图文件
console.log("保存截图: ", $assistant.captureScreen("/sdcard/assistant_screenshot.png"));
ADB 截图
特点:速度快,支持特殊页面
// ADB 截图功能
console.log("ADB截图: ", $shellHttp.captureScreen());
console.log("ADB保存: ", $shellHttp.captureScreen("/sdcard/adb_screenshot.png"));
Root 截图
特点:最高权限,完全兼容
// Root 权限截图
console.log("Root截图: ", $shellHttp.captureScreen());
console.log("Root保存: ", $shellHttp.captureScreen("/sdcard/root_screenshot.png"));
建议在项目初期就选用合适的替代截图方案,避免后期权限冲突带来的调试成本。