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); } } }