本代码来源于autoxjs群友@象棋研究者(体验地址: https://www.aixt.vip)
触发:
关闭:
以下为我提取图片的代码并测试,没有发现异常
[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 的功能。具体来说,它做了以下几个事情:
- 创建一个
BroadcastReceiver
对象,用于接收广播事件。 - 在
onReceive
方法中,判断是否需要重连 WebSocket。如果当前没有手动断开连接且 WebSocket 为 null 或者处于断开状态,则调用createWebSocket
方法重新连接 WebSocket。 - 重新设置下一次闹钟,以便下一次定时检查是否需要重连 WebSocket。
其中,createWebSocket
方法用于创建 WebSocket 连接,ui.run
方法用于在主线程中更新 UI。 AlarmManager
和 PendingIntent
则是 Android 系统的定时任务相关类,用于定时触发广播事件。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
- 最新
- 最热
只看作者