diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java index ed616f40..a55fa83e 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java @@ -20,7 +20,6 @@ import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.os.PowerManager; -import android.os.SystemClock; import android.telephony.SignalStrength; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; @@ -42,13 +41,13 @@ import com.xypower.mpmaster.sms.SmsSendReceiver; import org.json.JSONObject; import java.io.File; +import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Arrays; -import java.util.Calendar; +import java.util.Collections; import java.util.Date; import java.util.List; -import java.util.TimeZone; import java.util.logging.FileHandler; import java.util.logging.Level; import java.util.logging.Logger; @@ -239,13 +238,6 @@ public class MpMasterService extends Service { IntentFilter intentFilter; intentFilter = new IntentFilter(SimUtil.SMS_SEND_ACTION); registerReceiver(mSmsSnedReceiver, intentFilter); - - // AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); - - // startMaster(false); - startMpApp(); - - registerHeartbeatTimer(); } public String getIccid(int number) { @@ -300,6 +292,9 @@ public class MpMasterService extends Service { mUsingAbsHbTime = masterConfig.usingAbsHbTime != 0; mHeartbeatDuration = masterConfig.heartbeat * 60; // minute to second mAbsHeartbeatTimes = masterConfig.absHeartbeats; + if (mAbsHeartbeatTimes != null && mAbsHeartbeatTimes.length > 0) { + Arrays.sort(mAbsHeartbeatTimes); + } mSeparateNetwork = masterConfig.separateNetwork != 0; mTimeOfMpAppAlive = masterConfig.mpappMonitorTimeout; } @@ -456,7 +451,7 @@ public class MpMasterService extends Service { MicroPhotoContext.AppConfig appConfig = MicroPhotoContext.getMpAppConfig(getApplicationContext()); - logger.warning("Start Mntn report:" + masterUrl); + logger.warning("Start Mntn report:" + masterUrl + " Mntn Mode=" + Boolean.toString(mMntnMode) + " QuickHB=" + Boolean.toString(mQuickHbMode)); AppMaster appMaster = new AppMaster(this, masterUrl, appConfig.cmdid, bundleWithMpApp); appMaster.start(); @@ -475,6 +470,7 @@ public class MpMasterService extends Service { if (TextUtils.equals(ACTION_HEARTBEAT, action)) { mService.logger.info("Heartbeat Timer Fired ACTION=" + action); + mService.mPreviousHB = null; mService.registerHeartbeatTimer(); mService.startMaster(false); @@ -550,10 +546,10 @@ public class MpMasterService extends Service { long timeout = mHeartbeatDuration; if (mMntnMode && mQuickHbMode) { timeout = mQuickHeartbeatDuration; - registerHeartbeatTimer(SystemClock.elapsedRealtime() + timeout * 1000); + registerHeartbeatTimer(System.currentTimeMillis() + timeout * 1000); } else { long closestTime = -1; - if (mAbsHeartbeatTimes != null && mAbsHeartbeatTimes.length > 0) { + if (mUsingAbsHbTime) { Date dt = new Date(); long ts = dt.getTime(); ts -= ts % 1000; @@ -564,21 +560,29 @@ public class MpMasterService extends Service { 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; + + if (mAbsHeartbeatTimes != null && mAbsHeartbeatTimes.length > 0) { + + for (int i = 0; i < mAbsHeartbeatTimes.length; i++) { + if (mAbsHeartbeatTimes[i] > offsetTs) { + closestTime = mAbsHeartbeatTimes[i]; + break; + } } - } - if (closestTime == -1) { - // next day - closestTime = mAbsHeartbeatTimes[0] + 86400; + if (closestTime == -1) { + // next day + closestTime = mAbsHeartbeatTimes[0] + 86400; + } + } else { + closestTime = 9 * 3600 + 13 * 60; + if (offsetTs > closestTime) { + closestTime += 86400; + } } - registerAbsHeartbeatTimer(zeroPoint + closestTime * 1000); + registerHeartbeatTimer(zeroPoint + closestTime * 1000); } else { registerHeartbeatTimer(System.currentTimeMillis() + timeout * 1000); } @@ -591,6 +595,7 @@ public class MpMasterService extends Service { if (mPreviousHB != null) { try { alarmManager.cancel(mPreviousHB); + mPreviousHB = null; } catch (Exception ex) { } mPreviousHeartbeatTime = 0; @@ -599,25 +604,9 @@ public class MpMasterService extends Service { alarmIntent.setAction(ACTION_HEARTBEAT); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0); - mPreviousHB = pendingIntent; - mPreviousHeartbeatTime = triggerTime; - alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerTime, pendingIntent); - } - - private void registerAbsHeartbeatTimer(long triggerTime) { - - AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); - if (mPreviousHB != null) { - try { - alarmManager.cancel(mPreviousHB); - } catch (Exception ex) { - } - mPreviousHeartbeatTime = 0; - } - Intent alarmIntent = new Intent(); - alarmIntent.setAction(ACTION_HEARTBEAT); - PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0); - + Date dt = new Date(triggerTime); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + logger.info(String.format("Register HB:" + format.format(dt))); mPreviousHB = pendingIntent; mPreviousHeartbeatTime = triggerTime; alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent); @@ -653,6 +642,9 @@ public class MpMasterService extends Service { Log.i(TAG, "AppPath=" + appPath + " cmdid=" + cmdid); + // startMaster(false); + startMpApp(); + registerHeartbeatTimer(); startMaster(false);