图色脚本权限冲突

问题概述

当图色脚本与系统截图权限(如云控投屏或其他截图类应用)同时使用时,可能会出现以下问题:

  • 截图失败 - 无法获取屏幕图像
  • 权限冲突 - 多个应用争夺截图权限
  • 功能异常 - 投屏或脚本运行不稳定

根本原因

系统截图通道独占性:Android 系统的截图权限在同一时间只能被一个应用占用,无法多应用共享。
系统截图方式需要申请截图权限,会和云控的远程投屏权限冲突。

如果只运行脚本、不投屏,可以使用系统截图权限方式,速度快且性能稳定,系统截图 API 文档

// 请求截图权限
let captureStatus = requestScreenCapture();
if (!captureStatus) {
    toastLog("截图权限被拒绝,请手动授权");
    exit();
} else {
    toastLog("截图权限已获取,开始截图当前手机屏幕...");
    var img = captureScreen();
    console.log(img); // 截图返回 Image 对象
}

解决方案

方案一:避免权限冲突

  1. 单一应用原则
    • 确保同一时间只有一个应用使用系统截图权限
    • 图色脚本运行时,暂停其他截图类应用
  2. 权限管理
    • 合理安排脚本和投屏的使用时段。例如,在跑图色脚本时避免远程投屏;可以开启远程实时日志 ,即使不投屏,也能通过日志了解脚本执行情况。

方案二:替代截图方式(推荐)

了解更多截图方式请参阅: 屏幕截图的 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"));
建议在项目初期就选用合适的替代截图方案,避免后期权限冲突带来的调试成本。