小米手机使用脚本没反应,好像是要打开屏幕控制权,怎么用脚本打开,并且脚本用着用着就不动了,好像是应用被休眠了,怎么处理
第 1 条补充
· 1 个月前
如何使用代码在脚本运行期间不会被休眠掉,如何使用代码动态授权屏幕状态
第 2 条补充
· 1 个月前
脚本执行过程中跳转到其他应用,脚本使用这使用这让休眠掉了,如果和用代码避免应用在后台使用脚本被休眠
回答
-
开启权限步骤:
- 进入手机设置 → 应用管理 → Hamibot → 权限管理
- 必须开启:无障碍服务(核心权限)+ 后台弹出界面(跨应用交互)
- 运行需要截图功能的脚本时,首次运行需手动授予屏幕截图权限(勾选记住选择)
-
解决休眠问题:
- 完全关闭省电策略:设置 → 电池 → 省电设置 → 关闭所有省电规则
- 开启自启动权限:设置 → 应用管理 → Hamibot → 自启动
- 启动前台服务:在 Hamibot 应用内启动服务后,通知栏会显示常驻图标
- 系统差异提示:MIUI 系统建议关闭应用锁功能,避免后台进程被系统限制
-
进阶排查:
- 查看 Hamibot 右上角日志系统,检查是否有报错记录
- 若长时间无响应,尝试重启设备并重新启动 Hamibot 服务
- 对于持续性异常,通过控制中心的【设备管理】功能重置设备状态
补充回答 1
文档地址 https://docs.hamibot.com/
- 防止休眠的代码实现:
// 保持屏幕常亮
keepScreenOn(true);
// 释放屏幕状态
keepScreenOn(false);
- 屏幕状态授权处理:
// 请求保持唤醒权限(需在脚本开头声明)
var pm = context.getSystemService(context.POWER_SERVICE);
var wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "Hamibot:KeepScreen");
// 获取唤醒锁
wakeLock.acquire();
// 释放唤醒锁
wakeLock.release();
- 完整防休眠方案:
// 初始化时执行
auto.waitFor();
keepScreenOn(true);
// 监测屏幕状态变化
events.on("screen_on", function() {
toast("屏幕已唤醒");
});
events.on("screen_off", function() {
toast("屏幕已休眠");
keepScreenOn(true); // 自动恢复唤醒
});
// 长时间运行建议添加心跳检测
setInterval(function() {
if(!device.isScreenOn()) {
keepScreenOn(true);
}
}, 5000);
注意事项:
- 需在脚本头部添加权限声明:
// 需要设备唤醒权限
var PowerManager = android.os.PowerManager;
- 实际使用中需要配合系统设置:
- MIUI系统需关闭"应用电量管理"中的休眠限制
- 需要将Hamibot加入省电策略白名单
- 系统兼容性提示:
- 安卓6.0以上需要动态授权WAKE_LOCK权限
- 部分OEM系统需要特殊处理电源管理策略
- 调试建议:
- 通过logcat查看电源状态日志
- 使用
device.isScreenOn()
实时检测屏幕状态 - 配合通知栏常驻通知保持进程活跃
补充回答 2
文档地址 https://docs.hamibot.com/
针对应用切换导致脚本休眠问题,推荐以下解决方案:
- 强制保活方案(需要Root):
// 启动前台服务保活(需Root权限)
var service = require("services").create({
onStart: function() {
// 保持CPU唤醒
var pm = context.getSystemService(context.POWER_SERVICE);
var wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Hamibot:Script");
wakeLock.acquire();
}
});
service.start();
// 屏幕休眠恢复机制
events.on("screen_off", function() {
// 模拟电源键唤醒(需Root)
KeyCode(82); // 解锁屏幕
sleep(1000);
keepScreenOn(true);
});
- 应用切回机制:
// 定时检测是否在前台
setInterval(function() {
// 检查当前应用是否为Hamibot
if(currentPackage() != "com.hamibot.hamibot") {
// 切回Hamibot应用
launchApp("Hamibot");
sleep(1000);
// 激活脚本界面
var target = id("hamibot_start_script").findOne(1000);
if(target) target.click();
}
}, 5000);
- 系统级保活配置(适配安卓8+):
// 请求忽略电池优化
if(android.os.Build.VERSION.SDK_INT >= 23) {
var pm = context.getSystemService(context.POWER_SERVICE);
if(!pm.isIgnoringBatteryOptimizations(context.getPackageName())) {
var intent = new android.content.Intent();
intent.setAction("android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS");
intent.setData(android.net.Uri.parse("package:" + context.getPackageName()));
intent.addFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}
系统设置建议:
- 厂商系统适配:
- MIUI:设置 → 电池 → 电量与省电 → 关闭智能省电
- EMUI:手机管家 → 权限管理 → 锁定Hamibot进程
- OPPO:设置 → 应用管理 → Hamibot → 电池 → 关闭自动管理
- 基础配置:
- 必须开启:设置 → 辅助功能 → Hamibot服务 → 保持运行
- 关闭深度休眠:开发者选项 → 应用休眠 → 禁用Hamibot
调试工具:
// 检测当前进程状态
function checkProcessState() {
var activityManager = context.getSystemService(context.ACTIVITY_SERVICE);
var processes = activityManager.getRunningAppProcesses();
for(var i=0; i<processes.length; i++) {
if(processes[i].processName == "com.hamibot.hamibot") {
// 0=前台 100=后台
log("进程状态:" + processes[i].importance);
}
}
}
注意事项:
- Android 10+需要启用"显示悬浮窗"权限才能保证切屏可靠性
- Root方案建议使用
su
命令前加500ms延时:su -c "input keyevent 82"; sleep(500);
- 部分OEM系统需要配合Activity检测:
waitForActivity("com.hamibot.hamibot.MainActivity");
// 或使用包名检测
waitForPackage("com.hamibot.hamibot");
ℹ️ 本回答由 AI 生成,内容仅供参考