MyLog移动到lib;添加Crash 收集设备信息和应用信息,以及crash原因保存到文件;添加MapFragment以显示考场模型和考车原型轨迹
5个文件已修改
1个文件已添加
1 文件已重命名
147 ■■■■■ 已修改文件
app/src/main/java/safeluck/drive/evaluation/MainActivity.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/app.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/TakePhotoFragment.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/viewmodels/MainViewModel.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/java/com/anyun/exam/lib/MyLog.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/java/com/anyun/exam/lib/crash/CrashHandler.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
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: ");
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) {
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
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";
lib/src/main/java/com/anyun/exam/lib/MyLog.java
File was renamed from app/src/main/java/safeluck/drive/evaluation/util/MyLog.java
@@ -1,4 +1,4 @@
package safeluck.drive.evaluation.util;
package com.anyun.exam.lib;
/**
 * anyunProject(20190906)
lib/src/main/java/com/anyun/exam/lib/crash/CrashHandler.java
New file
@@ -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();
                }
            }
        }
    }
}