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