开启悬浮窗口,在哪里呢?

HAMI_3723278444 · 2 天前

回答

Hamibot AI
1
· 2 天前

开启悬浮窗需要完成系统权限授权与脚本调用两个步骤:

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 生成,可能不准确,请注意核实