小米手机使用脚本没反应,好像是要打开屏幕控制权,怎么用脚本打开,并且脚本用着用着就不动了,好像是应用被休眠了,怎么处理

已存档
wjuktymwar · 1 个月前
第 1 条补充
·
1 个月前

如何使用代码在脚本运行期间不会被休眠掉,如何使用代码动态授权屏幕状态

第 2 条补充
·
1 个月前

脚本执行过程中跳转到其他应用,脚本使用这使用这让休眠掉了,如果和用代码避免应用在后台使用脚本被休眠

回答

Hamibot AI
1
· 1 个月前
  1. 开启权限步骤:

    • 进入手机设置 → 应用管理 → Hamibot → 权限管理
    • 必须开启:无障碍服务(核心权限)+ 后台弹出界面(跨应用交互)
    • 运行需要截图功能的脚本时,首次运行需手动授予屏幕截图权限(勾选记住选择)
  2. 解决休眠问题:

    • 完全关闭省电策略:设置 → 电池 → 省电设置 → 关闭所有省电规则
    • 开启自启动权限:设置 → 应用管理 → Hamibot → 自启动
    • 启动前台服务:在 Hamibot 应用内启动服务后,通知栏会显示常驻图标
    • 系统差异提示:MIUI 系统建议关闭应用锁功能,避免后台进程被系统限制
  3. 进阶排查:

    • 查看 Hamibot 右上角日志系统,检查是否有报错记录
    • 若长时间无响应,尝试重启设备并重新启动 Hamibot 服务
    • 对于持续性异常,通过控制中心的【设备管理】功能重置设备状态

补充回答 1

文档地址 https://docs.hamibot.com/

  1. 防止休眠的代码实现:
// 保持屏幕常亮
keepScreenOn(true);

// 释放屏幕状态
keepScreenOn(false);
  1. 屏幕状态授权处理:
// 请求保持唤醒权限(需在脚本开头声明)
var pm = context.getSystemService(context.POWER_SERVICE);
var wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "Hamibot:KeepScreen");

// 获取唤醒锁
wakeLock.acquire();

// 释放唤醒锁
wakeLock.release();
  1. 完整防休眠方案:
// 初始化时执行
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);

注意事项:

  1. 需在脚本头部添加权限声明:
// 需要设备唤醒权限
var PowerManager = android.os.PowerManager;
  1. 实际使用中需要配合系统设置:
  • MIUI系统需关闭"应用电量管理"中的休眠限制
  • 需要将Hamibot加入省电策略白名单
  1. 系统兼容性提示:
  • 安卓6.0以上需要动态授权WAKE_LOCK权限
  • 部分OEM系统需要特殊处理电源管理策略
  1. 调试建议:
  • 通过logcat查看电源状态日志
  • 使用device.isScreenOn()实时检测屏幕状态
  • 配合通知栏常驻通知保持进程活跃

补充回答 2

文档地址 https://docs.hamibot.com/

针对应用切换导致脚本休眠问题,推荐以下解决方案:

  1. 强制保活方案(需要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);
});
  1. 应用切回机制
// 定时检测是否在前台
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);
  1. 系统级保活配置(适配安卓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);
    }
}

系统设置建议

  1. 厂商系统适配:
    • MIUI:设置 → 电池 → 电量与省电 → 关闭智能省电
    • EMUI:手机管家 → 权限管理 → 锁定Hamibot进程
    • OPPO:设置 → 应用管理 → Hamibot → 电池 → 关闭自动管理
  2. 基础配置:
    • 必须开启:设置 → 辅助功能 → 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);
        }
    }
}

注意事项

  1. Android 10+需要启用"显示悬浮窗"权限才能保证切屏可靠性
  2. Root方案建议使用su命令前加500ms延时:su -c "input keyevent 82"; sleep(500);
  3. 部分OEM系统需要配合Activity检测:
waitForActivity("com.hamibot.hamibot.MainActivity");
// 或使用包名检测
waitForPackage("com.hamibot.hamibot");
ℹ️ 本回答由 AI 生成,内容仅供参考