图色脚本权限冲突
问题概述
当图色脚本与系统截图权限(如云控投屏或其他截图类应用)同时使用时,可能会出现以下问题:
- 截图失败 - 无法获取屏幕图像
- 权限冲突 - 多个应用争夺截图权限
- 功能异常 - 投屏或脚本运行不稳定
根本原因
系统截图通道独占性:Android 系统的截图权限在同一时间只能被一个应用占用,无法多应用共享。
系统截图方式需要申请截图权限,会和云控的远程投屏权限冲突。
💡 如果只运行脚本、不投屏,可以使用系统截图权限方式,速度快且性能稳定
系统截图 API 文档
// 请求截图权限
let captureStatus = requestScreenCapture();
if (!captureStatus) {
toastLog("截图权限被拒绝,请手动授权");
exit();
} else {
toastLog("截图权限已获取,开始截图当前手机屏幕...");
var img = captureScreen();
console.log(img); // 截图返回 Image 对象
}
解决方案
方案一:避免权限冲突
- 单一应用原则
- 确保同一时间只有一个应用使用系统截图权限
- 图色脚本运行时,暂停其他截图类应用
- 权限管理
- 合理安排脚本和投屏的使用时段
- 避免并发使用截图相关功能
方案二:替代截图方式(推荐)
根据您启用的自动化模式,选择以下兼容性更好的截图方案:
HID 截图
特点:兼容性好,速度较慢
// 截图返回 Image 对象
console.log("HID截图: ", $hid.captureScreen());
// 截图保存至指定路径
console.log("保存截图: ", $hid.captureScreen("/sdcard/screenshot.png"));
无障碍截图
特点:速度较慢
// Android 11+ 推荐
console.log("无障碍截图(Android 11+): ", $automator.takeScreenshot());
// Android 9+ 兼容
console.log("无障碍截图(Android 9+): ", takeScreenshot());
数字助理截图(推荐)
特点:系统级权限,稳定性高,速度快
// 获取截图对象
console.log("数字助理截图: ", $assistant.captureScreen());
// 保存截图文件
console.log("保存截图: ", $assistant.captureScreen("/sdcard/assistant_screen.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_screen.png"));
方案对比
| 截图方式 | 速度 | 兼容性 | 特殊页面支持 | 推荐场景 |
|---|---|---|---|---|
| HID截图 | ⭐⭐ | ⭐⭐⭐⭐ | ❌ | 基础兼容 |
| 无障碍截图 | ⭐⭐ | ⭐⭐⭐ | ❌ | 系统原生 |
| 数字助理截图 | ⭐⭐⭐ | ⭐⭐⭐⭐ | ✅ | 稳定可靠 |
| ADB截图 | ⭐⭐⭐⭐ | ⭐⭐⭐ | ✅ | 高效开发 |
| Root截图 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ✅ | 专业使用 |
最佳实践建议
- 有 ADB/Root 权限:使用 ADB 截图,便于调试和快速迭代
- 没有ADB 权限:推荐数字助理截图,平衡速度与稳定性
- 性能优先:除 HID 和无障碍截图外,其他方式速度接近系统截图
核心优势
- 零冲突:所有替代方案均不占用系统截图通道
- 全兼容:可与云控投屏功能完美共存
- 特殊支持:支持密码页、支付页等限制截图的应用界面
- 性能优异:多数方案速度与系统截图相当
⚡ 重要提示:建议在项目初期就选用合适的替代截图方案,避免后期权限冲突带来的调试成本。