浏览代码

新增时间及时区同步

weizhengliang 2 年之前
父节点
当前提交
7b2795f71a

+ 12 - 0
common/src/main/code/com/wdkl/ncs/android/lib/utils/TimeHandle.kt

@@ -1,5 +1,6 @@
 package com.wdkl.ncs.android.lib.utils
 
+import java.text.SimpleDateFormat
 import java.util.*
 
 /**
@@ -59,4 +60,15 @@ object TimeHandle {
     fun getDay(time: Int): Int {
         return time / (60 * 60 * 24)
     }
+
+    //按指定格式获取指定日期时间
+    fun getDateTime(timeMillis: Long, format: String, timezone: String): String {
+        if (timeMillis > 0) {
+            val date = Date(timeMillis)
+            val sdf = SimpleDateFormat(format)
+            sdf.timeZone = TimeZone.getTimeZone(timezone)
+            return sdf.format(date)
+        }
+        return "null"
+    }
 }

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

@@ -149,6 +149,7 @@ public class DeviceChannel {
             case SOS:
             case ENTRACEGUARD:
             case REINFORCE:
+            case TIME:
                 //紧急呼叫优先级最高,如果当前正在通话需要将其打断
                 EventBus.getDefault().post(new MessageEvent(tcpModel, Constants.EVENT_TCP_MSG));
                 break;

+ 34 - 0
nursehome/src/main/java/com/wdkl/ncs/android/component/nursehome/activity/NurseHomeActivity.kt

@@ -16,6 +16,7 @@ import android.text.TextUtils
 import android.util.Log
 import android.view.KeyEvent
 import android.view.View
+import com.alibaba.fastjson.JSON
 import com.alibaba.fastjson.JSONObject
 import com.enation.javashop.android.jrouter.external.annotation.Router
 import com.enation.javashop.net.engine.model.NetState
@@ -1668,6 +1669,28 @@ class NurseHomeActivity : BaseActivity<NurseHomeActivityPresenter, ActivityNurse
                             RingPlayHelper.playRingTone(activity, R.raw.ring_tone, true)
                         }
                     }
+                } else if (tcpModel.type == TcpType.TIME) {
+                    if (tcpModel.action == TcpAction.TimeAction.SYNC) {
+                        var time = 0L
+                        var timeZone="Asia/Shanghai"
+                        if (canParseJson(tcpModel.data.toString())) {
+                            val json = JSON.parseObject(tcpModel.data.toString())
+                            time = json.getLong("time")*1000
+                            timeZone = json.getString("time_zone")
+                        } else {
+                            time = tcpModel.data.toString().toLong() * 1000
+                        }
+
+                        try {
+                            AppUtil.setSystemTime(BaseApplication.appContext, time, timeZone)
+                            Log.d("setTime", "set sys time1: $time, $timeZone")
+                        } catch (e: Exception) {
+                            //"20211213:092314"
+                            val timeStr = TimeHandle.getDateTime(time, "yyyyMMdd.HHmmss", timeZone)
+                            AppUtil.setSysTime(timeStr, timeZone)
+                            Log.d("setTime", "set sys time2: $timeStr, $timeZone")
+                        }
+                    }
                 }
             }
 
@@ -1736,6 +1759,17 @@ class NurseHomeActivity : BaseActivity<NurseHomeActivityPresenter, ActivityNurse
 
     }
 
+    private fun canParseJson(str:String) : Boolean {
+        var result = false
+        try {
+            JSON.parseObject(str)
+            result=true
+        }catch (e:java.lang.Exception){
+            result=false
+        }
+        return result
+    }
+
     //接听电话
     private fun acceptCall(callName: String) {
         //如果当前不是门禁请求界面才显示通话界面

+ 94 - 0
nursehome/src/main/java/com/wdkl/ncs/android/component/nursehome/util/AppUtil.java

@@ -0,0 +1,94 @@
+package com.wdkl.ncs.android.component.nursehome.util;
+
+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, String timeZone) {
+        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");
+            os.writeBytes("setprop persist.sys.timezone " + timeZone + "\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, String timeZone) {
+        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+        //alarmManager.setTimeZone("Asia/Shanghai");
+        alarmManager.setTimeZone(timeZone);
+        alarmManager.setTime(timeMills);
+    }
+}

+ 3 - 3
nursehome/src/main/java/com/wdkl/ncs/android/component/nursehome/util/TimeTransition.kt

@@ -41,7 +41,7 @@ object TimeTransition {
     fun getDateTime(format: String): String {
         val date = Date(System.currentTimeMillis())
         val sdf = SimpleDateFormat(format)
-        sdf.timeZone = TimeZone.getTimeZone("GMT+8")
+        //sdf.timeZone = TimeZone.getTimeZone("GMT+8")
         return sdf.format(date)
     }
 
@@ -52,7 +52,7 @@ object TimeTransition {
         if (timeMillis > 0) {
             val date = Date(timeMillis)
             val sdf = SimpleDateFormat(format)
-            sdf.timeZone = TimeZone.getTimeZone("GMT+8")
+            //sdf.timeZone = TimeZone.getTimeZone("GMT+8")
             return sdf.format(date)
         }
         return "null"
@@ -72,7 +72,7 @@ object TimeTransition {
         val simpleDateFormat = SimpleDateFormat(pattern)
         var date: Date? = null
         try {
-            simpleDateFormat.timeZone = TimeZone.getTimeZone("GMT+8")
+            //simpleDateFormat.timeZone = TimeZone.getTimeZone("GMT+8")
             date = simpleDateFormat.parse(s)
 
             return date!!.time

+ 0 - 1
nursehome/src/main/res/layout/activity_nurse_home.xml

@@ -37,7 +37,6 @@
                     android:layout_centerVertical="true"
                     android:format12Hour="yyyy-MM-dd HH:mm EEEE"
                     android:format24Hour="yyyy-MM-dd HH:mm EEEE"
-                    android:timeZone="GMT+8"
                     android:textColor="#2F9DF1"
                     android:textSize="22sp" />