回答
你提到的 "accessibility service" 是 Hamibot 实现自动化操作的核心技术基础。Hamibot 通过 Android 的无障碍服务(Accessibility Service)来获取屏幕上的控件信息、监听页面变化,并执行点击、滑动、输入等自动化操作。
以下是与该服务相关的关键 API 和用法说明:
auto.service
获取当前无障碍服务实例。如果无障碍服务未启动,返回 null。
// 文档地址 https://docs.hamibot.com/
if (auto.service) {
console.log("无障碍服务已启用");
} else {
console.log("无障碍服务未启用,请在设置中开启");
}
auto.waitFor()
等待无障碍服务启动,最多等待 10 秒。如果服务在超时前启动成功,则继续执行后续脚本;否则抛出异常。
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
console.log("无障碍服务已就绪,开始执行自动化任务");
通常放在脚本开头,确保无障碍服务可用后再进行 UI 操作。
auto.root
获取当前窗口的布局根节点(UiObject),可用于遍历整个页面的控件树。
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
var root = auto.root;
if (root) {
console.log("当前窗口根布局:", root);
} else {
console.log("无法获取根布局,请检查窗口过滤器或权限");
}
auto.windows
返回当前所有窗口的信息数组(AccessibilityWindowInfo),包括应用主窗口、输入法、悬浮窗、分屏窗口等。
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
console.log("当前窗口数量: " + auto.windows.length);
for (var i = 0; i < auto.windows.length; i++) {
var win = auto.windows[i];
console.log("窗口 ID: " + win.id + ", 类型: " + win.type + ", 包名: " + win.packageName);
}
适用于多窗口场景下的精确控制。
auto.setWindowFilter(filter)
设置窗口过滤器,用于指定哪些窗口可以被 auto.root 获取。
// 文档地址 https://docs.hamibot.com/
// 只允许包名为 com.example.app 的窗口作为根窗口
auto.setWindowFilter(function(window) {
return window.packageName === "com.example.app";
});
这在处理悬浮窗干扰时非常有用。
注意事项
- 使用基于控件的自动化功能前必须调用
auto.waitFor()或确保auto.service不为 null。 - 需要在系统设置中手动授予 Hamibot “无障碍权限”。
- 在 Android 5.0 以上才能使用
auto.windows和更完整的窗口管理功能。
如需进一步了解如何结合选择器进行控件查找和操作,请参考 基于控件的自动化文档。
补充回答 1
要让 Hamibot 正常运行脚本,你必须先开启无障碍服务权限。以下是设置方法:
- 打开 Hamibot App。
- 点击右上角的“开启”按钮,会跳转到系统设置页面。
- 找到“Hamibot 无障碍服务”选项并启用它。
如果你已经开启了但仍然无法运行脚本,可能是因为系统自动停止了服务。建议重启设备以恢复服务。
某些手机系统(如 MIUI、EMUI、ColorOS 等)会对后台服务进行严格限制,导致无障碍服务被关闭。为了避免这种情况,请参考以下优化设置:
- 锁定 Hamibot 在最近任务列表中(不要从后台清理掉)。
- 关闭电池优化或省电模式对 Hamibot 的限制。
- 在系统安全设置中允许 Hamibot 自启动和后台运行。
具体操作因手机品牌而异,可参考手机说明书或官方帮助文档。
如果无障碍服务频繁中断,建议查看 保持在线 的详细配置指南,确保脚本长时间稳定运行。
ℹ️ 本回答由 AI 生成,内容仅供参考