Auto.js后台保活措施-广播事件闹钟保活方案

本代码来源于autoxjs群友@象棋研究者(体验地址: https://www.aixt.vip)

描述

代码是为了保持 WebSocket 连接的活跃性,并且考虑了断网的情况。

内容

具体代码如下:

Auto.js后台保活措施-广播事件闹钟保活方案

触发:

Auto.js后台保活措施-广播事件闹钟保活方案

关闭:

Auto.js后台保活措施-广播事件闹钟保活方案

以下为我提取图片的代码并测试,没有发现异常

[content_hide]

importClass("android.app.PendingIntent");
importClass("android.app.AlarmManager");
importClass("android.os.SystemClock");

// 保活策路
let intervalTime = 10 * 1000;
let intentAction = "com.autox.red.package";

// 荻取AlarmManager服
let alarnManager = context.getSystemService(context.ALARM_SERVICE);

let intent = new Intent(context);
intent.setAction(intentAction);

// 1. 创建一个PendingIntent,用于在闹钟触发时发送广播
let pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
let triggerAtMillis = java.lang.System.currentTimeMillis() + intervalTime;

// 注册广播接收器来处理闹钟事件
let receiver = new android.content.BroadcastReceiver({
  onReceive: function (context, intent) {
    console.log("websocket heard check");
    // 闹钟触发时执行的操作
    if (
      !manualDisconnetWebSocket &&
      (webSocket == null || webSocket.readySate == 3)
    ) {
      ui.run(() => {
        let serverUrl = ui.serverId.text();
        let userId = ui.userId.text();
        let password = ui.password.text();
        createWebSocket(serverUrl, userId, password);
        console.log("recovery web socket");
      });
    }

    // 重新设置下一次闹钟
    let nextTriggerAtMillis =
      java.lang.System.currentTimeMillis() + intervalTime;
    alarnManager.setExactAndAllowWhileIdle(
      AlarmManager.RTC_WAKEUP,
      nextTriggerAtMillis,
      pendingIntent
    );
  },
});

// 触发
// 设置一个重复的闹钟,使用setExactAndAllowWhileIdle方法确保准时唤醒设备
alarnManager.setExactAndAllowWhileIdle(
  AlarmManager.RTC_WAKEUP,
  triggerAtMillis,
  pendingIntent
);

// 动态注册广播接收器
context.registerReceiver(
  receiver,
  new android.content.IntentFilter(intentAction)
);

setInterval(() => {}, 1000);

setTimeout(() => {
  exit();
}, 5000);

// 关闭
$events.on("exit", () => {
  // 当不再需要时,取消注册广播接收器
  context.unregisterReceiver(receiver);
});

[/content_hide]

分析

这段代码是实现了一个监听广播、定时重连 WebSocket 的功能。具体来说,它做了以下几个事情:

  1. 创建一个 BroadcastReceiver 对象,用于接收广播事件。
  2. 在 onReceive 方法中,判断是否需要重连 WebSocket。如果当前没有手动断开连接且 WebSocket 为 null 或者处于断开状态,则调用 createWebSocket 方法重新连接 WebSocket。
  3. 重新设置下一次闹钟,以便下一次定时检查是否需要重连 WebSocket。

其中,createWebSocket 方法用于创建 WebSocket 连接,ui.run 方法用于在主线程中更新 UI。 AlarmManagerPendingIntent 则是 Android 系统的定时任务相关类,用于定时触发广播事件。

© 版权声明
THE END
喜欢就支持一下吧
点赞1 分享
评论 共8条

请登录后发表评论