Pārlūkot izejas kodu

增加服务器时间同步

weizhengliang 3 gadi atpakaļ
vecāks
revīzija
e583a2adbc

+ 14 - 0
callingbed/src/main/java/com/wdkl/app/ncs/callingbed/activity/CallingbedActivity.kt

@@ -31,6 +31,7 @@ import com.wdkl.app.ncs.callingbed.agreement.CallingbedAgreement
 import com.wdkl.app.ncs.callingbed.fragment.SkyCallFragment
 import com.wdkl.app.ncs.callingbed.helper.ScreenManagerUtil
 import com.wdkl.ncs.android.lib.base.BaseActivity
+import com.wdkl.ncs.android.lib.base.BaseApplication
 import com.wdkl.ncs.android.lib.utils.AppTool
 import com.wdkl.ncs.android.lib.utils.TimeHandle
 import com.wdkl.ncs.android.lib.utils.push
@@ -908,6 +909,19 @@ class CallingbedActivity :BaseActivity<CallingbedActivityPresenter, CallingbedMa
                     } else if (tcpModel.action == TcpAction.DataAction.REFRESH) {
                         //重新加载数据,比如出院,入院等
                         initDevice()
+                    } else if (tcpModel.type == TcpType.TIME) {
+                        if (tcpModel.action == TcpAction.TimeAction.SYNC) {
+                            val time = tcpModel.data.toString().toLong() * 1000
+                            try {
+                                AppUtil.setSystemTime(BaseApplication.appContext, time)
+                                Log.d("setTime", "set sys time1: $time")
+                            } catch (e: Exception) {
+                                //"20211213:092314"
+                                val timeStr = TimeHandle.getDateTime(time, "yyyyMMdd.hhmmss")
+                                AppUtil.setSysTime(timeStr)
+                                Log.d("setTime", "set sys time2: $timeStr")
+                            }
+                        }
                     }
 
                     //探视

+ 92 - 0
callingbed/src/main/java/com/wdkl/app/ncs/callingbed/helper/AppUtil.java

@@ -0,0 +1,92 @@
+package com.wdkl.app.ncs.callingbed.helper;
+
+import android.app.AlarmManager;
+import android.content.Context;
+import android.text.TextUtils;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.Calendar;
+
+public class AppUtil {
+
+    /**
+     * 设置系统时间
+     *
+     * @param time
+     */
+    public static void setSysTime(String time) {
+        try {
+            Process process = Runtime.getRuntime().exec("su");
+            if (null == process) return;
+            DataOutputStream os = new DataOutputStream(process.getOutputStream());
+            os.writeBytes("setprop persist.sys.timezone Asia/Shanghai\n");
+            if (android.os.Build.VERSION.SDK_INT >= 24) {//7.1以上的系统
+                String datetime = changeTimeForm(time); //20211213:092314  ------  051315372019.00
+                os.writeBytes("/system/bin/date " + datetime + " set\n");
+            } else {
+                os.writeBytes("/system/bin/date -s " + time + "\n");//【时间格式 yyyyMMdd.HHmmss】"20131023.112800"
+            }
+            os.writeBytes("clock -w\n");
+            os.writeBytes("exit\n");
+            os.flush();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static String changeTimeForm(String t) {
+        if (!TextUtils.isEmpty(t) && t.length() >= 15) {
+            String yyyy = substringByLengh(t, 0, 4);
+            String MMdd = substringByLengh(t, 4, 8);
+            String HHmm = substringByLengh(t, 9, 13);
+            String ss = substringByLengh(t, 13, 15);
+
+            return MMdd + HHmm + yyyy + "." + ss;
+        } else {
+            return "051315372019.00";
+        }
+    }
+
+    /**
+     * 字符串按索引截取
+     *
+     * @param str
+     * @return
+     */
+    public static String substringByLengh(String str, int start, int end) {
+        if (str == null) {
+            return "";
+        }
+        if (start > end) {
+            return "";
+        }
+        if (str.length() - 1 < start || str.length() < end) {
+            return "";
+        }
+
+        return str.substring(start, end);
+    }
+
+
+    public static void setSystemTime(Context context, int year, int month, int day, int hour, int minute, int mill) {
+        Calendar c = Calendar.getInstance();
+        c.set(Calendar.YEAR, year);
+        c.set(Calendar.MONTH, month);
+        c.set(Calendar.DAY_OF_MONTH, day);
+        c.set(Calendar.HOUR_OF_DAY, hour);
+        c.set(Calendar.MINUTE, minute);
+        c.set(Calendar.SECOND, mill);
+        c.set(Calendar.MILLISECOND, 0);
+        long when = c.getTimeInMillis();
+        if (when / 1000 < Integer.MAX_VALUE) {
+            ((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)).setTime(when);
+        }
+    }
+
+    public static void setSystemTime(Context context, long timeMills) {
+        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+        alarmManager.setTimeZone("Asia/Shanghai");
+        alarmManager.setTime(timeMills);
+    }
+}

+ 1 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/channel/DeviceChannel.java

@@ -93,6 +93,7 @@ public class DeviceChannel {
                 }
                 break;
             case DEVICE:
+            case TIME:
             case BROADCAST:
             case SOS:
             case SIDE: