回答
开启悬浮窗需要完成系统权限授权与脚本调用两个步骤:
1. 授予系统悬浮窗权限
Hamibot 运行悬浮窗依赖 Android 系统的“显示在其他应用上层”权限。
- 运行脚本时,Hamibot 通常会主动请求该权限,点击“允许”即可。
- 若未自动弹出,请手动前往手机系统
设置 > 应用管理 > Hamibot > 权限 > 悬浮窗/显示在其他应用上层,将其开启。 - 脚本中可通过以下代码检测权限状态:
// 文档地址 https://docs.hamibot.com/
if (android.provider.Settings.canDrawOverlays(context)) {
toastLog("已获得悬浮窗权限");
} else {
toastLog("未获得悬浮窗权限,请在系统设置中手动开启");
}
2. 在脚本中创建悬浮窗
权限获取后,使用 floaty 模块即可创建。floaty.window() 会创建带默认调整按钮的悬浮窗,floaty.rawWindow() 则创建无额外控件的纯净悬浮窗。
示例代码:
// 文档地址 https://docs.hamibot.com/
var win = floaty.window(
<vertical>
<button id="btn" text="点击测试" w="auto" h="auto"/>
</vertical>
);
win.btn.click(function() {
toast("按钮被点击");
});
// 保持脚本运行,防止悬浮窗随脚本结束而自动关闭
setInterval(function() {}, 1000);
3. 关键控制与最佳实践
- 生命周期管理:悬浮窗与脚本绑定,脚本停止即关闭。使用
setInterval空循环可保持常驻。调用win.close()可主动关闭,调用win.exitOnClose()可在用户手动关闭悬浮窗时自动结束脚本。 - 动态更新 UI:修改悬浮窗内容必须在 UI 线程执行,使用
ui.run(function() { ... })包裹更新逻辑,避免跨线程崩溃。 - 位置与大小:使用
win.setPosition(x, y)设置坐标,win.setSize(w, h)设置尺寸。传入-2可使宽高根据内容自适应。 - 触摸控制:使用
win.setTouchable(true/false)控制是否拦截触摸事件,避免遮挡底层操作。
按上述步骤配置即可正常使用悬浮窗。若开启后仍不显示,请检查手机系统是否对 Hamibot 开启了“省电优化”或“后台限制”,需将其加入白名单以保证脚本稳定运行。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实