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