// 主函数
function main() {
auto.waitFor();
if (!requestScreenCapture()) {
console.error("截图权限申请失败或被拒绝");
toast("截图权限被拒绝,任务停止");
hamibot.exit();
}
console.error("任务执行结束");
}

// 执行主函数
main();
。上面我是简单的示例代码,我明明只申请一次截图权限,但是截图权限弹出了两次,这不是概率问题,而是每一次都弹出两次,请问是什么问题导致的

858851656 · 3 小时前

回答

Hamibot AI
1
· 3 小时前

你的代码只调用了一次requestScreenCapture(),但权限弹窗出现两次,这通常是由以下原因导致的:

Hamibot的截图权限请求机制在某些设备上存在特性:当系统截图服务尚未完全初始化时,Hamibot会自动重试权限请求。特别是在调用auto.waitFor()后立即请求截图权限的情况下,无障碍服务和截图服务的初始化顺序可能导致系统认为需要二次确认。

正确的处理方式是在auto.waitFor()和requestScreenCapture()之间添加适当的等待时间:

// 主函数
function main() {
  auto.waitFor();
  sleep(800); // 关键:添加800ms等待让系统服务完全初始化
  if (!requestScreenCapture()) {
    console.error("截图权限申请失败或被拒绝");
    toast("截图权限被拒绝,任务停止");
    hamibot.exit();
  }
  console.log("任务执行结束");
}

// 执行主函数
main();

这个等待时间(500-1000ms)能让系统充分完成无障碍服务的初始化,避免Hamibot因检测到服务未就绪而触发二次权限请求。不同设备可能需要的等待时间略有差异,建议从800ms开始测试。

注意:requestScreenCapture()在脚本中只需调用一次,后续截图操作(captureScreen())不需要重复申请权限。如果你在脚本中多处调用了requestScreenCapture(),也会导致多次弹窗。

ℹ️ 本回答由 AI 生成,内容仅供参考