diff --git a/common/src/main/java/com/xypower/common/MicroPhotoContext.java b/common/src/main/java/com/xypower/common/MicroPhotoContext.java index 01767292..d21ee354 100644 --- a/common/src/main/java/com/xypower/common/MicroPhotoContext.java +++ b/common/src/main/java/com/xypower/common/MicroPhotoContext.java @@ -68,6 +68,7 @@ public class MicroPhotoContext { public int separateNetwork = 1; // Default is 1 public int mpappMonitorTimeout = 30 * 60000; // 30 minutes public int timeForKeepingLogs = 15; // Unit day + public boolean syncTime = false; public String getUrl() { if (TextUtils.isEmpty(server)) { @@ -276,6 +277,7 @@ public class MicroPhotoContext { masterConfig.usingAbsHbTime = jsonObject.optInt("usingAbsHbTime", 0); masterConfig.separateNetwork = jsonObject.optInt("separateNetwork", 1); masterConfig.timeForKeepingLogs = jsonObject.optInt("timeForKeepingLogs", 15); + masterConfig.syncTime = jsonObject.optInt("syncTime", 0) != 0; // masterConfig.mpappMonitorTimeout = jsonObject.optInt("mpappMonitorTimeout", 30 * 60000); int mpappMonitorTimeout = jsonObject.optInt("mpappMonitorTimeout", 30 * 60000); diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java b/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java index 4380a893..e3941815 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/AppMaster.java @@ -281,6 +281,11 @@ public class AppMaster { httpURLConnection.setDoOutput(true); httpURLConnection.setRequestProperty("Accept-Cmds", "Multiple"); + final boolean shouldSyncTime = mService.shouldSyncTime(); + final long requestSyncTime = System.currentTimeMillis(); + if (shouldSyncTime) { + httpURLConnection.setRequestProperty("ReqSyncTime", Long.toString(requestSyncTime)); + } // postParams(httpURLConnection.getOutputStream(), postParams); buildParams(httpURLConnection.getOutputStream(), postParams); @@ -292,6 +297,24 @@ public class AppMaster { if (responseCode == HttpURLConnection.HTTP_OK) { //在子线程中不能操作UI线程,通过handler在UI线程中进行操作 // handler.sendEmptyMessage(0x00); + // httpURLConnection.get + try { + if (shouldSyncTime) { + long localResponseTime = System.currentTimeMillis(); + Map> responseHeaders = httpURLConnection.getHeaderFields(); + if (responseHeaders != null && responseHeaders.containsKey("ResSyncTime")) { + List resSyncTimes = responseHeaders.get("ResSyncTime"); + + if (resSyncTimes != null && !resSyncTimes.isEmpty()) { + long serverSyncTime = Long.parseLong(resSyncTimes.get(0)); + + mService.updateTime(serverSyncTime + (localResponseTime - requestSyncTime) / 2); + } + } + } + } catch (Exception ex) { + ex.printStackTrace(); + } String response = convertStreamToString(inputStream); process(response); } diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java index 50ecb0e3..694dbdc7 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java @@ -99,6 +99,7 @@ public class MpMasterService extends Service { private int mHeartbeatDuration = 600; // Unit: second 10m = 10 * 60s private long mTimeForKeepingLogs = 86400000 * 15; // 15 days + private boolean mSyncTime = false; private AlarmReceiver mAlarmReceiver = null; private ScreenActionReceiver mScreenaAtionReceiver = null; @@ -310,6 +311,7 @@ public class MpMasterService extends Service { if (masterConfig.timeForKeepingLogs > 0) { mTimeForKeepingLogs = masterConfig.timeForKeepingLogs * 86400000; } + mSyncTime = masterConfig.syncTime; } private void loadIccid() { @@ -349,6 +351,8 @@ public class MpMasterService extends Service { return mMntnMode; } + public boolean shouldSyncTime() { return mSyncTime; } + public void startMpApp() { try { final Context context = getApplicationContext(); @@ -853,14 +857,6 @@ public class MpMasterService extends Service { return JSONUtils.saveJson(path, jsonObject); } - public boolean updateTime(long timeInMillis) { - try { - SysApi.setSystemTime(getApplicationContext(), timeInMillis); - } catch (Exception ex) { - } - return true; - } - public static int getSignalLevel(int num) { String result = getSystemProperty("vendor.ril.nw.signalstrength.lte." + Integer.toString(num)); if (TextUtils.isEmpty(result)) { @@ -1023,6 +1019,16 @@ public class MpMasterService extends Service { System.exit(0); } + public void updateTime(long ms) { + Intent intent = new Intent("com.xy.xsetting.action"); + intent.putExtra("cmd", "settime"); + intent.putExtra("timemills", ms); + + intent.setPackage("com.android.systemui"); + intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); + sendBroadcast(intent); + } + public native static int getInt(int cmd); public native static int setInt(int cmd, int val); public native static int[] getStats(long ts);