From a2e4806f23e52c56cfd917d6dbe04e7dafb5d64b Mon Sep 17 00:00:00 2001
From: endian11 <Dana_Lee1016@126.com>
Date: 星期五, 27 九月 2019 12:00:47 +0800
Subject: [PATCH] MyLog移动到lib;添加Crash 收集设备信息和应用信息,以及crash原因保存到文件;添加MapFragment以显示考场模型和考车原型轨迹

---
 app/src/main/java/safeluck/drive/evaluation/app.java                        |    8 +-
 app/src/main/java/safeluck/drive/evaluation/MainActivity.java               |    2 
 app/src/main/java/safeluck/drive/evaluation/viewmodels/MainViewModel.java   |    2 
 app/src/main/java/safeluck/drive/evaluation/fragment/TakePhotoFragment.java |    2 
 lib/src/main/java/com/anyun/exam/lib/crash/CrashHandler.java                |  128 ++++++++++++++++++++++++++++++++++++++++++
 app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java       |    3 +
 lib/src/main/java/com/anyun/exam/lib/MyLog.java                             |    2 
 7 files changed, 140 insertions(+), 7 deletions(-)

diff --git a/app/src/main/java/safeluck/drive/evaluation/MainActivity.java b/app/src/main/java/safeluck/drive/evaluation/MainActivity.java
index de1ee26..118aaa1 100644
--- a/app/src/main/java/safeluck/drive/evaluation/MainActivity.java
+++ b/app/src/main/java/safeluck/drive/evaluation/MainActivity.java
@@ -16,7 +16,7 @@
 
 import me.yokeyword.fragmentation.SupportActivity;
 import safeluck.drive.evaluation.fragment.HomeFragment;
-import safeluck.drive.evaluation.util.MyLog;
+import com.anyun.exam.lib.MyLog;
 import safeluck.drive.evaluation.util.PermissionManager;
 import safeluck.drive.evaluation.viewmodels.MainViewModel;
 
diff --git a/app/src/main/java/safeluck/drive/evaluation/app.java b/app/src/main/java/safeluck/drive/evaluation/app.java
index 76557fe..79fa256 100644
--- a/app/src/main/java/safeluck/drive/evaluation/app.java
+++ b/app/src/main/java/safeluck/drive/evaluation/app.java
@@ -1,8 +1,6 @@
 package safeluck.drive.evaluation;
 
-import android.app.ActivityManager;
 import android.app.Application;
-import android.content.Context;
 import android.support.annotation.NonNull;
 import android.util.Log;
 
@@ -12,7 +10,9 @@
 
 import me.yokeyword.fragmentation.Fragmentation;
 import me.yokeyword.fragmentation.helper.ExceptionHandler;
-import safeluck.drive.evaluation.util.MyLog;
+import com.anyun.exam.lib.MyLog;
+import com.anyun.exam.lib.crash.CrashHandler;
+
 import safeluck.drive.evaluation.util.SystemUtil;
 
 /**
@@ -41,6 +41,8 @@
                     })
                     .install();
 
+            CrashHandler crashHandler =CrashHandler.getInstance();
+            crashHandler.init(getApplicationContext());
             AYSdk.getInstance().init(getApplicationContext());
             AYSdk.getInstance().registListener(this);
             Log.i(TAG, "onCreate: ");
diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java
index 0de7c4c..ed8a45a 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java
@@ -5,6 +5,8 @@
 import android.graphics.Paint;
 import android.graphics.Path;
 import android.graphics.PathDashPathEffect;
+import android.graphics.Rect;
+import android.graphics.RectF;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
@@ -67,6 +69,7 @@
             canvas = holder.lockCanvas();
             paint.setColor(Color.RED);
             path.addCircle(mSurfaceView.getWidth()/2,mSurfaceView.getHeight()/2,70, Path.Direction.CW);
+            path.addOval(new RectF(new Rect(100,100,200,200)), Path.Direction.CW);
             canvas.drawPath(path,paint);
 
         } catch (Exception e) {
diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/TakePhotoFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/TakePhotoFragment.java
index 72be15e..3659b0e 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/TakePhotoFragment.java
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/TakePhotoFragment.java
@@ -58,7 +58,7 @@
 import me.yokeyword.fragmentation.SupportFragment;
 import safeluck.drive.evaluation.R;
 import safeluck.drive.evaluation.customview.AutoFitTextureView;
-import safeluck.drive.evaluation.util.MyLog;
+import com.anyun.exam.lib.MyLog;
 
 /**
  * MyApplication2
diff --git a/app/src/main/java/safeluck/drive/evaluation/viewmodels/MainViewModel.java b/app/src/main/java/safeluck/drive/evaluation/viewmodels/MainViewModel.java
index 6276cde..d9eccc3 100644
--- a/app/src/main/java/safeluck/drive/evaluation/viewmodels/MainViewModel.java
+++ b/app/src/main/java/safeluck/drive/evaluation/viewmodels/MainViewModel.java
@@ -8,7 +8,7 @@
 
 import java.util.concurrent.atomic.AtomicInteger;
 
-import safeluck.drive.evaluation.util.MyLog;
+import com.anyun.exam.lib.MyLog;
 
 public class MainViewModel extends ViewModel {
     private static final String TAG = "MainViewModel";
diff --git a/app/src/main/java/safeluck/drive/evaluation/util/MyLog.java b/lib/src/main/java/com/anyun/exam/lib/MyLog.java
similarity index 98%
rename from app/src/main/java/safeluck/drive/evaluation/util/MyLog.java
rename to lib/src/main/java/com/anyun/exam/lib/MyLog.java
index 30342d7..372772b 100644
--- a/app/src/main/java/safeluck/drive/evaluation/util/MyLog.java
+++ b/lib/src/main/java/com/anyun/exam/lib/MyLog.java
@@ -1,4 +1,4 @@
-package safeluck.drive.evaluation.util;
+package com.anyun.exam.lib;
 
 /**
  * anyunProject(20190906)
diff --git a/lib/src/main/java/com/anyun/exam/lib/crash/CrashHandler.java b/lib/src/main/java/com/anyun/exam/lib/crash/CrashHandler.java
new file mode 100644
index 0000000..6955b7a
--- /dev/null
+++ b/lib/src/main/java/com/anyun/exam/lib/crash/CrashHandler.java
@@ -0,0 +1,128 @@
+package com.anyun.exam.lib.crash;
+
+import android.content.Context;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.os.Build;
+
+import com.anyun.exam.lib.MyLog;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.lang.reflect.Field;
+import java.text.SimpleDateFormat;
+import java.util.HashMap;
+import java.util.Map;
+
+
+
+/**
+ * MyApplication2
+ * Created by lzw on 2019/9/27. 10:22:20
+ * 閭锛�632393724@qq.com
+ * All Rights Saved! Chongqing AnYun Tech co. LTD
+ */
+public class CrashHandler implements Thread.UncaughtExceptionHandler {
+
+    private static CrashHandler mInstance = new CrashHandler();
+    private Thread.UncaughtExceptionHandler mDefaultCrashHandler;
+    private Context mContext;
+    private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    private HashMap<String, String> infos = new HashMap<>();
+
+    /**
+     * 绉佹湁鏋勯�犲嚱鏁�
+     **/
+    private CrashHandler() {
+
+    }
+
+    public static CrashHandler getInstance() {
+        return mInstance;
+    }
+
+    public void init(Context context) {
+        this.mContext = context;
+        mDefaultCrashHandler = Thread.getDefaultUncaughtExceptionHandler();
+        Thread.setDefaultUncaughtExceptionHandler(this);
+    }
+
+    @Override
+    public void uncaughtException(Thread t, Throwable e) {
+        if (!handleException(e) && mDefaultCrashHandler != null) {
+            //濡傛灉鐢ㄦ埛娌℃湁澶勭悊寮傚父鍒欒绯荤粺榛樿鐨勫紓甯稿鐞嗗櫒鍘诲鐞嗗紓甯�
+            mDefaultCrashHandler.uncaughtException(t, e);
+        } else {
+            try {
+                Thread.sleep(3000);
+            } catch (InterruptedException ex) {
+                ex.printStackTrace();
+            }
+
+            //閫�鍑虹▼搴�
+            android.os.Process.killProcess(android.os.Process.myPid());
+            System.exit(1);
+        }
+    }
+
+    private boolean handleException(Throwable ex) {
+        if (ex == null) {
+            return false;
+        }
+        //鏀堕泦璁惧淇℃伅
+        collectDeviceInfo();
+        saveCrashInfo2File(ex);
+        return true;
+    }
+
+    private void saveCrashInfo2File(Throwable ex) {
+        StringBuffer stringBuffer = new StringBuffer();
+        for (Map.Entry<String, String> entry : infos.entrySet()) {
+            String key = entry.getKey();
+            String value = entry.getValue();
+            stringBuffer.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();
+        stringBuffer.append(result);
+
+        MyLog.i("crash", stringBuffer.toString());
+    }
+
+    private void collectDeviceInfo() {
+        if (mContext != null) {
+            PackageManager packageManager = mContext.getPackageManager();
+            try {
+                PackageInfo packageInfo = packageManager.getPackageInfo(mContext.getPackageName(), PackageManager.GET_ACTIVITIES);
+                if (packageInfo != null) {
+                    String versionCode = Long.toString(packageInfo.versionCode);
+                    String versionName = packageInfo.versionName;
+                    infos.put("versionName", versionName);
+                    infos.put("versionCode", versionCode);
+                }
+            } catch (PackageManager.NameNotFoundException e) {
+                e.printStackTrace();
+            }
+            Field[] fields = Build.class.getDeclaredFields();
+            for (Field field :
+                    fields) {
+                field.setAccessible(true);
+                try {
+                    infos.put(field.getName(), field.get(null).toString());
+                } catch (IllegalAccessException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+}

--
Gitblit v1.8.0