Browse Source

串口心跳超时设备会自动重启,但app升级时心跳断开会导致重启,而不发心跳又无法控制门灯。现增加个状态保存,需要升级两次来保证升级成功。

weizhengliang 2 năm trước cách đây
mục cha
commit
175c57e60d

+ 3 - 0
callingdoor/src/main/java/com/wdkl/app/ncs/callingdoor/activity/AppUpdateActivity.kt

@@ -12,6 +12,7 @@ import com.wdkl.app.ncs.callingdoor.databinding.UpdateLayBinding
 import com.wdkl.app.ncs.callingdoor.helper.AppUpdateHelper
 import com.wdkl.app.ncs.callingdoor.helper.HttpHelper
 import com.wdkl.app.ncs.callingdoor.launch.CallingdoorLaunch
+import com.wdkl.app.ncs.callingdoor.settings.SettingConfig
 import com.wdkl.ncs.android.lib.base.BaseActivity
 import com.wdkl.ncs.android.lib.utils.showMessage
 import com.wdkl.ncs.android.lib.vo.filter
@@ -39,6 +40,8 @@ class AppUpdateActivity :BaseActivity<AppUpdatePresenter, UpdateLayBinding>(), A
     override fun init() {
         Constant.APP_UPDATING = true
         if (!TextUtils.isEmpty(Constant.APP_PATH)) {
+            SettingConfig.setNewVersion(activity, true)
+
             val downloadPath = urlManager.base + Constant.APP_PATH
             Log.e(TAG, "start download: $downloadPath")
             downLoadAPK(downloadPath)

+ 8 - 2
callingdoor/src/main/java/com/wdkl/app/ncs/callingdoor/activity/CallingdoorActivity.kt

@@ -628,11 +628,17 @@ class CallingdoorActivity :BaseActivity<CallingdoorActivityPresenter, Callingdoo
 
         app_version.setOnLongClickListener {
             AppInfoDialogHelper.showAppDialog(activity,
-                { dialog, which -> AppUpdateHelper.reboot(activity) },
+                { dialog, which ->
+                    SettingConfig.setNewVersion(BaseApplication.appContext, false)
+                    handler.postDelayed({
+                        AppUpdateHelper.reboot(activity)
+                    }, 8000)
+                },
                 { dialog, which ->
                     Constant.silentUpdate = false
                     checkAppVersion()
-                }, { dialog, which ->
+                },
+                { dialog, which ->
                     showMessage("开启调试")
                     openNetworkDebug()
                 })

+ 2 - 2
callingdoor/src/main/java/com/wdkl/app/ncs/callingdoor/adapter/FrameRoomAdapter.kt

@@ -120,11 +120,11 @@ class FrameRoomAdapter : RecyclerView.Adapter<FrameRoomAdapter.BedViewHolder> {
                 if (bedVO.customerSex == 0) {
                     holder.customName.setCompoundDrawables(drawableFemale, null, null, null)
                     //holder.customAge.setCompoundDrawables(iconFemale, null, null, null)
-                    holder.customAge.text = " " + bedVO.customerAge + bedVO.customerAgeUnit
+                    holder.customAge.text = " " + bedVO.customerAge + bedVO.customerAgeUnit
                 } else if (bedVO.customerSex == 1) {
                     holder.customName.setCompoundDrawables(drawableMale, null, null, null)
                     //holder.customAge.setCompoundDrawables(iconMale, null, null, null)
-                    holder.customAge.text = " " + bedVO.customerAge + bedVO.customerAgeUnit
+                    holder.customAge.text = " " + bedVO.customerAge + bedVO.customerAgeUnit
                 } else {
                     holder.customName.setCompoundDrawables(drawableEmpty, null, null, null)
                     //holder.customAge.setCompoundDrawables(null, null, null, null)

+ 48 - 0
callingdoor/src/main/java/com/wdkl/app/ncs/callingdoor/helper/AnrFcExceptionUtil.java

@@ -12,9 +12,11 @@ import android.util.Log;
 import com.github.anrwatchdog.ANRError;
 import com.github.anrwatchdog.ANRWatchDog;
 import com.wdkl.ncs.android.component.welcome.activity.WelcomeActivity;
+import com.wdkl.ncs.android.middleware.api.UrlManager;
 
 import java.io.File;
 import java.io.FileOutputStream;
+import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.io.Writer;
@@ -24,6 +26,13 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.TimeZone;
 
+import okhttp3.Call;
+import okhttp3.Callback;
+import okhttp3.FormBody;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+
 /**
  * Created by dengzhe on 2018/4/2.
  * //=========================FC&ANR异常处理类=========================//
@@ -38,6 +47,9 @@ public class AnrFcExceptionUtil implements Thread.UncaughtExceptionHandler {
 
     private static AnrFcExceptionUtil mAnrFcExceptionUtil;
 
+    private OkHttpClient okHttpClient;
+    private UrlManager urlManager = UrlManager.Companion.build();
+
     /**
      * 存储异常和参数信息
      */
@@ -143,6 +155,10 @@ public class AnrFcExceptionUtil implements Thread.UncaughtExceptionHandler {
                 Log.i(TAG, "saveCrashInfo2File: "+sb.toString());
                 fos.close();
             }
+
+            //上传错误日志
+            uploadingErrorLog(application.getPackageName(), "crash", "crash", "", sb.toString());
+
             return fileName;
         } catch (Exception e) {
             Log.e(TAG, "an error occured while writing file...", e);
@@ -150,6 +166,38 @@ public class AnrFcExceptionUtil implements Thread.UncaughtExceptionHandler {
         return null;
     }
 
+    private void uploadingErrorLog(String class_name, String err_msg, String exception_name, String method_name, String stack_trace) {
+        if(okHttpClient == null){
+            okHttpClient = new OkHttpClient();
+        }
+
+        FormBody.Builder formBody = new FormBody.Builder();
+        formBody.add("class_name",class_name);
+        formBody.add("method_name",method_name);
+        formBody.add("exception_name",exception_name);
+        formBody.add("err_msg",err_msg);
+        formBody.add("stack_trace",stack_trace);
+
+        Request request  = new Request.Builder()
+                .url(urlManager.getBase() + "device/error_log")
+                .post(formBody.build())
+                .build();
+
+        okHttpClient.newCall(request).enqueue(new Callback() {
+            @Override
+            public void onFailure(Call call, IOException e) {
+                Log.e(TAG,"错误日志上传失败"+e.getMessage());
+            }
+
+            @Override
+            public void onResponse(Call call, Response response) throws IOException {
+                Log.d(TAG,"错误日志上传成功");
+                String data = response.body().string();
+                Log.d(TAG,"错误日志数据 data "+data);
+            }
+        });
+    }
+
     private void restartApp() {
         //重新启动app
         Intent mStartActivity = new Intent(application.getApplicationContext(), WelcomeActivity.class);

+ 26 - 8
callingdoor/src/main/java/com/wdkl/app/ncs/callingdoor/service/APPService.java

@@ -5,6 +5,10 @@ import android.content.Intent;
 import android.os.Binder;
 import android.os.IBinder;
 import android.support.annotation.Nullable;
+import android.util.Log;
+
+import com.wdkl.app.ncs.callingdoor.settings.SettingConfig;
+import com.wdkl.ncs.android.lib.base.BaseApplication;
 
 import java.util.Timer;
 import java.util.TimerTask;
@@ -46,26 +50,40 @@ public class APPService extends Service {
     public TimerTask timerTask;
     //初始化门灯
     public boolean isFirstOpenDoorLight = true;
-
+    private int count = 0;
+    private boolean newVersion;
 
     /**
      * 发送心跳信号
      */
     private void sendHeartbeat() {
+        newVersion = SettingConfig.getNewVersion(BaseApplication.appContext);
         if (timer != null) timer.purge();
         if (timerTask != null) timerTask.cancel();
         timer = new Timer();
         timerTask = new TimerTask() {
             @Override
             public void run() {
-                    if (SerialPortUtil.getInstance().isOpenSerialPortUtil) {
-                        SerialPortUtil.getInstance().startHeart();
-                        //串口开启后门灯立即初始化
-                        if (isFirstOpenDoorLight) {
-                            SerialPortUtil.getInstance().sendCommand(SerialPortUtil.DOORLIGHT, "111", "F");  //门灯白色
-                            isFirstOpenDoorLight = false;
-                        }
+                if (newVersion) {
+                    count++;
+                }
+
+                if (count > 80) {
+                    //如果有新版本升级,5分钟后恢复串口心跳
+                    count = 0;
+                    newVersion = false;
+                    SettingConfig.setNewVersion(BaseApplication.appContext, false);
+                }
+                Log.e("AppService", "newVersion: " + newVersion + ", count: " + count);
+
+                if (SerialPortUtil.getInstance().isOpenSerialPortUtil && !newVersion) {
+                    SerialPortUtil.getInstance().startHeart();
+                    //串口开启后门灯立即初始化
+                    if (isFirstOpenDoorLight) {
+                        SerialPortUtil.getInstance().sendCommand(SerialPortUtil.DOORLIGHT, "111", "F");  //门灯白色
+                        isFirstOpenDoorLight = false;
                     }
+                }
 
             }
         };

+ 11 - 0
callingdoor/src/main/java/com/wdkl/app/ncs/callingdoor/settings/SettingConfig.java

@@ -59,6 +59,9 @@ public class SettingConfig {
     private static final String KEY_IN_NURSING = "KEY_IN_NURSING";
     private static final String KEY_NURSING_ID = "KEY_NURSING_ID";
 
+    //是否检测到新版本
+    private static final String KEY_NEW_APP_VERSION = "KEY_NEW_APP_VERSION";
+
     public static boolean getInNursing(Context context) {
         return getSP(context).getBoolean(KEY_IN_NURSING, false);
     }
@@ -75,6 +78,14 @@ public class SettingConfig {
         getEditor(context).putInt(KEY_NURSING_ID, nursingId).apply();
     }
 
+    public static boolean getNewVersion(Context context) {
+        return getSP(context).getBoolean(KEY_NEW_APP_VERSION, false);
+    }
+
+    public static void setNewVersion(Context context, boolean newVersion) {
+        getEditor(context).putBoolean(KEY_NEW_APP_VERSION, newVersion).apply();
+    }
+
     /**
      * 获取白天亮度
      *

+ 2 - 1
callingdoor/src/main/res/layout/update_tips_dialog.xml

@@ -3,7 +3,8 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:gravity="center"
-    android:orientation="vertical">
+    android:orientation="vertical"
+    android:padding="10dp">
 
     <TextView
         android:id="@+id/update_tip_text"