回答
在 Hamibot 中,无障碍模式是运行基于控件操作脚本的前提。为了确保脚本能够正常获取界面元素并进行交互,你需要在脚本开头正确设置无障碍模式。
1. 启用无障碍服务
使用 auto() 或推荐的 auto.waitFor() 来启用无障碍服务:
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
该语句会检查无障碍服务是否已开启,如果没有则跳转到启用页面,并阻塞等待直到用户手动开启后继续执行脚本。相比 auto(),auto.waitFor() 提供了更好的用户体验,避免脚本直接崩溃。
⚠️ 注意:此函数为阻塞调用,在 UI 模式(如悬浮窗界面)下不能使用,除非脚本支持协程。建议在普通脚本模式下运行。
2. 设置运行模式(可选)
你可以通过 auto.setMode() 设置无障碍模式:
// 文档地址 https://docs.hamibot.com/
auto.setMode("fast"); // 启用快速模式,开启控件缓存,提升查找速度
"fast":快速模式,适合对性能要求高的脚本。"normal":正常模式,为默认值,大多数场景无需更改。
你也可以在 auto() 中直接指定模式:
// 文档地址 https://docs.hamibot.com/
auto("fast");
但同样建议改用 auto.waitFor() + auto.setMode() 组合以获得更稳定的体验。
3. 添加标志(高级用法)
通过 auto.setFlags() 可以启用一些底层特性来优化行为:
// 文档地址 https://docs.hamibot.com/
auto.setFlags(["useUsageStats", "findOnUiThread"]);
常用标志说明:
useUsageStats:使用“使用情况统计”服务来判断当前应用包名,提高currentPackage()的准确性(需授予“查看使用情况”权限)。findOnUiThread:在主线程中执行选择器搜索,解决某些线程安全问题(极少需要)。
完整示例
// 文档地址 https://docs.hamibot.com/
auto.waitFor(); // 等待无障碍服务启动
auto.setMode("fast"); // 设置为快速模式
auto.setFlags(["useUsageStats"]); // 使用使用情况统计辅助识别当前应用
// 脚本主逻辑开始
home();
sleep(1000);
launchApp("微信");
text("聊天").findOne().parent().click();
注意事项
- 必须授予 无障碍服务权限,否则脚本无法运行。
- 若脚本频繁失败,请确认无障碍服务未被系统杀死(部分手机需锁定 Hamibot 进程)。
- 游戏类应用通常不使用控件结构,应采用触摸或图像识别方式处理,无需依赖无障碍模式。
如需进一步调试,可参考日志输出和控件树分析功能。
ℹ️ 本回答由 AI 生成,内容仅供参考