Browse Source

<修复一个获取系统设置参数失败bug,增加崩溃日志收集功能>

weizhengliang 4 years ago
parent
commit
26499b70ef

+ 1 - 1
app/build.gradle

@@ -25,7 +25,7 @@ android {
         minSdkVersion 15
         targetSdkVersion 26
         versionCode 1
-        versionName "1.33"
+        versionName "1.34"
         testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
 
         buildConfigField "String", "BUILD_TIME", getDate()

+ 1 - 1
app/src/main/java/com/wdkl/callingbed/ui/CallingBedActivity.java

@@ -836,7 +836,7 @@ public class CallingBedActivity extends BaseActivity implements ISerialPortBedOn
                                     Constants.NURSINGLIGHT = object.getString("nursingLight");
                                     Constants.CALLINGTIMEOUT = object.getString("CallingTimeOut");
                                     Constants.SCREENEXTINGUISHTIME = object.getString("screenExtinguishTime");
-                                    Constants.DOORCALLVOICE = object.getString("DoorSipVol");
+                                    //Constants.DOORCALLVOICE = object.getString("DoorSipVol");
                                     Constants.BEDCALLVOICE = object.getString("BedSipVol");
                                     handler.sendEmptyMessage(SYSTEM_DATA_RESPONSE);
                                     setSYSParameter();

+ 70 - 2
app/src/main/java/com/wdkl/callingbed/util/anrfcutil/AnrFcExceptionUtil.java

@@ -5,6 +5,7 @@ import android.app.AlarmManager;
 import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
+import android.os.Environment;
 import android.os.Looper;
 import android.util.Log;
 
@@ -12,6 +13,17 @@ import com.github.anrwatchdog.ANRError;
 import com.github.anrwatchdog.ANRWatchDog;
 import com.wdkl.callingbed.MyApplication;
 import com.wdkl.callingbed.common.Constants;
+import com.wdkl.callingbed.util.LogUtil;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * Created by dengzhe on 2018/4/2.
@@ -27,6 +39,15 @@ public class AnrFcExceptionUtil implements Thread.UncaughtExceptionHandler {
 
     private static AnrFcExceptionUtil mAnrFcExceptionUtil;
 
+    /**
+     * 存储异常和参数信息
+     */
+    private Map<String, String> paramsMap = new HashMap<>();
+    /**
+     * 格式化时间
+     */
+    private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
+
     public static AnrFcExceptionUtil getInstance(MyApplication application) {
         if (mAnrFcExceptionUtil == null) {
             mAnrFcExceptionUtil = new AnrFcExceptionUtil(application);
@@ -75,7 +96,7 @@ public class AnrFcExceptionUtil implements Thread.UncaughtExceptionHandler {
             return false;
         }
         //使用Toast来显示异常信息
-        new Thread() {
+        /*new Thread() {
             @Override
             public void run() {
                 Looper.prepare();
@@ -83,10 +104,57 @@ public class AnrFcExceptionUtil implements Thread.UncaughtExceptionHandler {
 //                        Toast.LENGTH_SHORT).show();
                 Looper.loop();
             }
-        }.start();
+        }.start();*/
+        saveCrashInfo2File(ex);
         return true;
     }
 
+    /**
+     * 保存错误信息到文件中
+     *
+     * @param ex
+     * @return 返回文件名称
+     */
+    private String saveCrashInfo2File(Throwable ex) {
+        StringBuffer sb = new StringBuffer();
+        for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
+            String key = entry.getKey();
+            String value = entry.getValue();
+            sb.append(key + "=" + value + "\n");
+        }
+
+        Writer writer = new StringWriter();
+        PrintWriter printWriter = new PrintWriter(writer);
+        ex.printStackTrace(printWriter);
+        Throwable cause = ex.getCause();
+        while (cause != null) {
+            cause.printStackTrace(printWriter);
+            cause = cause.getCause();
+        }
+        printWriter.close();
+        String result = writer.toString();
+        sb.append(result);
+        try {
+            long timestamp = System.currentTimeMillis();
+            String time = format.format(new Date());
+            String fileName = "crash-" + time + "-" + timestamp + ".log";
+            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
+                String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/crash/";
+                File dir = new File(path);
+                if (!dir.exists()) {
+                    dir.mkdirs();
+                }
+                FileOutputStream fos = new FileOutputStream(path + fileName);
+                fos.write(sb.toString().getBytes());
+                Log.i(TAG, "saveCrashInfo2File: "+sb.toString());
+                fos.close();
+            }
+            return fileName;
+        } catch (Exception e) {
+            Log.e(TAG, "an error occured while writing file...", e);
+        }
+        return null;
+    }
 
     /**
      * ===================================================崩溃异常处理===================================================