回答
脚本执行速度快于界面渲染速度会导致点击失败。Android 16 系统对权限弹窗的渲染可能有额外延迟,需增加等待策略。
解决方案
-
增加显式等待
在调用requestScreenCapture()后,不要立即查找按钮。系统弹窗出现需要时间,建议增加sleep(2000)以上延时。 -
使用 waitFor 等待元素
使用waitFor()替代findOne(),确保元素完全加载后再操作。 -
添加重试机制
若首次点击失败,循环检测并重试,提高成功率。 -
检查无障碍服务层级
部分系统权限弹窗需要无障碍服务具有更高权限。确保 Hamibot 无障碍服务已开启且未被系统限制。
代码示例
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
// 请求截图权限
if (!requestScreenCapture()) {
toastLog("请求截图失败");
stop();
}
// 关键:等待弹窗渲染
sleep(2000);
// 重试逻辑点击确认按钮
function clickConfirmButton() {
var maxRetries = 5;
for (var i = 0; i < maxRetries; i++) {
// 等待按钮出现,超时 3 秒
var btn = text("立即开始").findOne(3000) || text("允许").findOne(3000);
if (btn && btn.clickable()) {
btn.click();
log("✅ 点击成功");
return true;
}
log("⚠️ 未找到按钮,第 " + (i + 1) + " 次重试");
sleep(1000);
}
return false;
}
if (!clickConfirmButton()) {
toastLog("❌ 多次尝试点击失败");
}
Android 16 特别注意事项
- 系统动画延迟:新版系统动画可能更慢,适当增加
sleep时间至 3 秒。 - 权限弹窗变化:确认按钮文本可能变为“允许”、“立即开始”或英文,需适配多种文本特征。
- 后台限制:确保 Hamibot 应用未被系统后台限制,否则无法响应弹窗。
若以上方法无效,建议手动授予截图权限后运行脚本,避开自动点击弹窗环节。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实