autoxja7.0.1版本无法请求屏幕截图权限

问题描述:请求截图权限时脚本会一直处于运行状态并且即使下方代码中有变量未声明也不报错
运行环境同我上个帖子,我还测试了mumu12模拟器,也是同样的问题
代码:
//安卓版本高于Android 9
if (device.sdkInt > 28) {
//等待截屏权限申请并同意
threads.start(function () {
packageName("com.android.systemui").text("立即开始").waitFor();
text("立即开始").click();
});
}
//申请截屏权限
if (!requestScreenCapture()) {
toast("请求截图失败");
exit();
}

// files.path() 将相对路径转为绝对路径
let myModelPath = files.path("./models");
let result = paddle.ocr(img, myModelPath)

运行效果
Screenshot_2024-08-09-00-27-07-700_org.autojs.autoxjs.v7.jpg

在Auto.js中请求截图权限时,脚本可能会一直处于运行状态,且不会因未声明变量而报错,这可能与以下几个方面有关:

  1. 权限申请方式的异步性requestScreenCapture()是异步请求,这意味着在请求权限的过程中,后续代码会继续执行。为了确保在成功获得权限后再执行后续代码,我们可以在代码中加入更好的管理流程。

  2. 使用 waitFor 进行同步:在请求权限后,使用一个循环来等待直到权限获得,这样可以让代码更加清晰和可靠。

  3. 错误处理:可以在代码中加入更详细的错误处理,以帮助调试。

修改后的示例代码如下:

// 安卓版本高于Android 9
if (device.sdkInt > 28) {
    // 等待截屏权限申请并同意
    threads.start(function () {
        packageName("com.android.systemui").text("立即开始").waitFor();
        text("立即开始").click();
    });
}

// 申请截屏权限
if (!requestScreenCapture()) {
    toast("请求截图失败");
    exit();
}

// 等待权限确认
sleep(1000);  // 等待一段时间,确保权限已经申请

// files.path() 将相对路径转为绝对路径
let myModelPath = files.path("./models");

// 确保 img 变量已正确定义
if (typeof img === "undefined") {
    toast("图像变量未定义");
    exit();
}

// 使用OCR进行识别
let result = paddle.ocr(img, myModelPath);
if (result == null) {
    toast("OCR识别失败");
} else {
    // 处理识别结果
    log(result);
}

关键改动说明:

  • waitFor() 本身会导致程序暂停,所以如果你启动一个新线程去处理截屏权限申请,它不会阻止主线程的执行。
  • 引入了 sleep(1000) 来等待权限被授予,确保在继续执行后续代码前获取到了所必需的权限。
  • img 变量的检查:在使用它之前,先检查它是否已经定义,以避免未定义问题。
  • 错误处理和日志记录:提供了更多的用户反馈,以便于帮助调试。

通过这种方法,你应能更好地控制脚本的执行流,避免在请求权限时带来的问题。希望这些建议能够帮助你解决问题!