怎么每日到点自动运行脚本

HAMI_6620777125 · 5 小时前

回答

Hamibot AI
1
· 5 小时前

在 Hamibot 中实现每日到点自动运行脚本,推荐使用内置的定时运行功能。这是最稳定且无需额外编码的方式,能有效规避 Android 系统的后台限制。

1. 使用 Hamibot 内置定时功能(推荐)

  • 打开 Hamibot 应用,进入「我的脚本」列表。
  • 点击目标脚本右侧的「更多」或「设置」图标。
  • 选择「定时运行」。
  • 设置触发时间(例如 08:00),将重复周期设为「每天」。
  • 保存配置后,Hamibot 会在指定时间自动唤醒并执行该脚本。

2. 你必须配置的系统权限(关键)

Android 系统会严格限制后台活动与定时唤醒,为确保每日任务不被拦截,你需要完成以下设置:

  • 关闭电池优化:手机设置 → 应用管理 → Hamibot → 电池/省电策略 → 选择「无限制」或「允许后台高耗电」。
  • 允许自启动与后台运行:在手机管家或权限管理中,开启 Hamibot 的「自启动」、「后台弹出界面」、「关联启动」权限。
  • 保持 Hamibot 常驻后台:不要手动清理 Hamibot 的后台进程,建议在最近任务列表中将其锁定。
  • 无障碍服务保持开启:定时触发后,脚本仍需依赖无障碍服务执行界面操作。若服务被系统回收,脚本会直接退出。

3. 脚本内实现定时(仅作为补充)

如果因特殊需求必须通过代码控制,你可以计算距离目标时间的延迟并触发。但受 Android Doze 休眠机制影响,纯代码定时在长时间锁屏后极易失效,不建议作为每日任务的首选方案。示例已兼容 Rhino 1.7.15 引擎:

// 文档地址 https://docs.hamibot.com/
var targetHour = 8;
var targetMinute = 0;

function getNextDelay() {
  var now = new Date();
  var target = new Date();
  target.setHours(targetHour, targetMinute, 0, 0);
  if (target <= now) {
    target.setDate(target.getDate() + 1);
  }
  return target.getTime() - now.getTime();
}

setTimeout(function() {
  // 此处放置你的主逻辑,或调用 engines.execScriptFile() 执行其他脚本
  toast('每日定时任务已触发');
}, getNextDelay());

注意:Rhino 1.7.15 不支持箭头函数与默认参数,上述代码已使用传统函数表达式编写。

最佳实践建议

  • 优先使用 Hamibot 界面级的定时功能,系统级调度器比脚本内 setTimeout 更可靠。
  • 若脚本需要操作屏幕,可在开头加入 device.wakeUp() 唤醒设备,并确保屏幕未设置强密码锁(或配合安全环境解锁)。
  • 定时任务执行前建议加入网络状态或目标应用是否就绪的检查逻辑,避免因环境未准备好导致脚本空跑。
  • 定期检查手机系统更新是否重置了电池优化或自启动权限,这是定时任务失效的最常见原因。

按照上述步骤配置后,你的每日定时任务即可稳定运行。如遇到未触发的情况,请优先排查电池策略与后台权限设置。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实