diff --git a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java index a2befe3a..a951f22e 100644 --- a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java +++ b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java @@ -95,7 +95,7 @@ public class MicroPhotoService extends Service { public static final String ACTION_START = "com.xypower.mpapp.ACT_START"; public static final String ACTION_STOP = "com.xypower.mpapp.ACT_STOP"; public static final String ACTION_MAIN = "com.xypower.mpapp.ACT_MAIN"; - private static final String ACTION_HEARTBEAT = "com.xypower.mpapp.ACT_HB"; + private static final String ACTION_HEARTBEAT = MicroPhotoContext.ACTION_HEARTBEAT_MP; private static final String ACTION_TAKE_PHOTO = "com.xypower.mpapp.ACT_TP"; private static final String ACTION_IMP_PUBKRY = "com.xypower.mpapp.ACT_IMP_PUBKEY"; @@ -225,20 +225,7 @@ public class MicroPhotoService extends Service { if (aci == null) { break; } - - /* - if (aci.getShowIntent().isBroadcast()) { - // alarmManager.cancel(aci.getShowIntent()); - } - - */ } - // alarmManager.cancel(); - - // boolean res = false; - // Environment.getExternalStoragePublicDirectory(String) - - // registerHeartbeatTimer(getHeartbeatDuration()); enableGps(true); requestPosition(); diff --git a/common/src/main/java/com/xypower/common/MicroPhotoContext.java b/common/src/main/java/com/xypower/common/MicroPhotoContext.java index 0f7cfc03..79e92995 100644 --- a/common/src/main/java/com/xypower/common/MicroPhotoContext.java +++ b/common/src/main/java/com/xypower/common/MicroPhotoContext.java @@ -25,6 +25,8 @@ public class MicroPhotoContext { public static final String PACKAGE_NAME_MPAPP = "com.xypower.mpapp"; public static final String PACKAGE_NAME_MPMASTER = "com.xypower.mpmaster"; + public static final String ACTION_HEARTBEAT_MP = "com.xypower.mpapp.ACT_HB"; + public final static String DEFAULT_MASTER_URL = "http://180.166.218.222:40101/"; public final static String MASTER_URL_CMDID = "cmdid"; public final static int DEFAULT_PROTOCOL = 0xFF00; diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java index 3a3040c4..c02ef15d 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java @@ -114,6 +114,9 @@ public class MpMasterService extends Service { private boolean mSeparateNetwork = false; + private PendingIntent mPreviousHB = null; + private long mPreviousHeartbeatTime = 0; + public MpMasterService() { } @Override @@ -199,6 +202,9 @@ public class MpMasterService extends Service { intentFilter.addAction(ACTION_MSG_BROADCAST); intentFilter.addAction(ACTION_UPDATE_CONFIGS); intentFilter.addAction(ACTION_UPD_OTA); + if (!mSeparateNetwork) { + intentFilter.addAction(MicroPhotoContext.ACTION_HEARTBEAT_MP); + } registerReceiver(mAlarmReceiver, intentFilter); } @@ -400,6 +406,15 @@ public class MpMasterService extends Service { mService.startMaster(); mService.startMpApp(); + } else if (TextUtils.equals(MicroPhotoContext.ACTION_HEARTBEAT_MP, action)) { + if (!mService.mSeparateNetwork && !mService.mMntnMode && !mService.mQuickHbMode) { + mService.logger.info("Heartbeat Timer Fired By MpAPP ACTION=" + action); + + mService.registerHeartbeatTimer(mService.mPreviousHeartbeatTime + mService.mHeartbeatDuration * 1000); + + mService.startMaster(); + mService.startMpApp(); + } } else if (TextUtils.equals(ACTION_UPDATE_CONFIGS, action)) { int restart = intent.getIntExtra("restart", 0); mService.logger.info("Update Config Fired ACTION=" + action + " restart=" + restart); @@ -413,21 +428,9 @@ public class MpMasterService extends Service { } } } - private void registerHeartbeatTimer(int duration) { - int orgHeartbeatDuration = mHeartbeatDuration; - mHeartbeatDuration = duration; - if (orgHeartbeatDuration == 0) { - registerHeartbeatTimer(); - } - } private void registerHeartbeatTimer() { - Intent alarmIntent = new Intent(); - alarmIntent.setAction(ACTION_HEARTBEAT); - PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0); - - AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); long timeout = mHeartbeatDuration; if (mMntnMode && mQuickHbMode) { timeout = mQuickHeartbeatDuration; @@ -435,7 +438,26 @@ public class MpMasterService extends Service { } - alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + timeout * 1000, pendingIntent); + registerHeartbeatTimer(SystemClock.elapsedRealtime() + timeout * 1000); + } + + private void registerHeartbeatTimer(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); + + mPreviousHB = pendingIntent; + mPreviousHeartbeatTime = triggerTime; + alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerTime, pendingIntent); } @Override