From 5faeadce9df749ddde37e89e82bc420f4deedd97 Mon Sep 17 00:00:00 2001 From: Matthew Date: Sat, 1 Jun 2024 21:35:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=92=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=BF=90=E7=BB=B4=E5=BF=83=E8=B7=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xypower/mpmaster/MpMasterService.java | 44 ++++++++----------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java index ae5894e3..ed616f40 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java @@ -240,7 +240,6 @@ public class MpMasterService extends Service { intentFilter = new IntentFilter(SimUtil.SMS_SEND_ACTION); registerReceiver(mSmsSnedReceiver, intentFilter); - // AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); // startMaster(false); @@ -553,40 +552,35 @@ public class MpMasterService extends Service { timeout = mQuickHeartbeatDuration; registerHeartbeatTimer(SystemClock.elapsedRealtime() + timeout * 1000); } else { - long closestTime = 0; + long closestTime = -1; if (mAbsHeartbeatTimes != null && mAbsHeartbeatTimes.length > 0) { - long currentTimeMillis = System.currentTimeMillis(); - long heartTimeMills = currentTimeMillis + timeout * 1000; - Date dt = new Date(); - for (int i = 0; i < mAbsHeartbeatTimes.length; i++) { - int mAbsHeartbeatTime = mAbsHeartbeatTimes[i]; - int hour = mAbsHeartbeatTime / 60; - int minute = mAbsHeartbeatTime % 60; - if (hour >= 24) { - continue; - } + long ts = dt.getTime(); + ts -= ts % 1000; - dt.setHours(hour); - dt.setMinutes(minute); - dt.setSeconds(0); + dt.setHours(0); + dt.setMinutes(0); + dt.setSeconds(0); - long selecttime = dt.getTime(); - if (selecttime > currentTimeMillis && selecttime < heartTimeMills) { - closestTime = selecttime; + long zeroPoint = dt.getTime(); + zeroPoint -= zeroPoint % 1000; + + long offsetTs = (ts - zeroPoint) / 1000; + for (int i = 0; i < mAbsHeartbeatTimes.length; i++) { + if (mAbsHeartbeatTimes[i] >= offsetTs) { + closestTime = mAbsHeartbeatTimes[i]; break; - } else { - if (i == (mAbsHeartbeatTimes.length - 1)) { - closestTime = heartTimeMills; - } } } - if (closestTime > 0) { - registerAbsHeartbeatTimer(closestTime); + if (closestTime == -1) { + // next day + closestTime = mAbsHeartbeatTimes[0] + 86400; } + + registerAbsHeartbeatTimer(zeroPoint + closestTime * 1000); } else { - registerHeartbeatTimer(SystemClock.elapsedRealtime() + timeout * 1000); + registerHeartbeatTimer(System.currentTimeMillis() + timeout * 1000); } } }