回答
在 Hamibot 中,脚本运行在设备本地,因此无法在脚本内部直接监听“设备上线”事件(设备离线时脚本进程本身无法运行)。要实现“设备上线后自动执行特定脚本”,推荐通过以下标准方案实现:
方案一:使用控制台任务调度(官方推荐)
Hamibot 控制台的任务调度模块已内置设备状态判断逻辑。
- 登录 Hamibot 控制台,进入 任务调度 页面。
- 创建新任务,选择目标脚本与目标设备。
- 在执行策略中,选择 设备在线时执行 或设置固定周期(如每 5 分钟检查一次)。
- 保存后,当设备恢复在线,控制台会自动将任务下发至设备执行。
此方案无需编写代码,由服务端统一调度,稳定性与成功率最高。
方案二:通过外部服务 + Hamibot API 触发
适合需要与自有系统、CI/CD 或第三方平台联动的场景。
- 外部服务定期调用 Hamibot 开放 API
GET /api/v1/devices查询设备状态。 - 当返回的
status字段变为online时,调用POST /api/v1/scripts/{scriptId}/run触发目标脚本。 - 可在请求头中携带你的 API Token 进行鉴权。
此方案完全由外部逻辑控制,支持复杂的触发条件(如结合时间、网络类型、电量等)。
方案三:脚本内轮询网络状态(本地替代方案)
如果必须在设备端实现,可编写一个常驻脚本监听网络连通性。示例代码如下(已适配 Rhino 1.7.15 引擎):
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
// 保持脚本常驻运行
setInterval(function() {}, 1000);
// 轮询检查网络连通性
var checkTimer = setInterval(function() {
try {
var res = http.get("https://www.baidu.com", {timeout: 3000});
if (res.statusCode == 200) {
log("网络已恢复,准备执行目标脚本");
engines.execScriptFile("target_script.js");
clearInterval(checkTimer); // 执行后停止轮询
}
} catch(e) {
// 网络未通或请求失败,继续等待下一轮检查
}
}, 10000);
注意:此方案会增加设备耗电,且受 Android 后台管理策略影响较大,仅作为无服务端调度时的备选方案。
关键前置条件:确保设备稳定在线
无论采用哪种方案,都必须先解决 Android 系统杀后台的问题。请按以下顺序配置:
- 在系统设置中开启 Hamibot 的 自启动 权限。
- 将 Hamibot 的电池优化策略设置为 无限制(或“不优化”)。
- 在多任务界面将 Hamibot 应用 锁定(通常下拉或点击锁图标)。
- 部分机型(小米、华为、OPPO、vivo 等)需在“应用管理”中允许后台活动。若权限已开启但仍掉线,尝试关闭通知/后台权限后重新开启一次,以强制激活系统服务。
根据你的实际架构选择方案。若需控制台调度配置细节或 API 调用示例,可提供你的具体使用场景,我将为你补充对应步骤。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实