美文网首页
Android用户crash信息收集

Android用户crash信息收集

作者: AndyWei123 | 来源:发表于2017-07-26 16:14 被阅读0次
    public class CrashHandler implements Thread.UncaughtExceptionHandler {
        private static final String PATH = Environment.getExternalStorageDirectory().getPath()+"/CrashTest/log";
        private static final String FILE_NAME="Crash";
        private static final String FILE_NAME_SUFFIX=".txt";
        private static CrashHandler crashHandler=new CrashHandler();
        private Thread.UncaughtExceptionHandler mDefaultHandler;
        private static final boolean DEBUG=true;
        private Context mContext;
        private CrashHandler()
        {
        }
        public static CrashHandler getInstance()
        {
            return crashHandler;
        }
        public void init(Context context)
        {
            mDefaultHandler=Thread.getDefaultUncaughtExceptionHandler();
            Thread.setDefaultUncaughtExceptionHandler(this);
            mContext=context;
        }
    //最重要的重写的方法在这里处理错误
        @Override
        public void uncaughtException(Thread t, Throwable e) {
            try {
                dumpExceptionToSDcard(e);
            } catch (PackageManager.NameNotFoundException e1) {
                e1.printStackTrace();
            }
            uploadExceptionToserver();
            e.printStackTrace();
            if(mDefaultHandler!=null)
            {
                mDefaultHandler.uncaughtException(t,e);
            }else
            {
                Process.killProcess(Process.myPid());
            }
        }
        private void dumpExceptionToSDcard(Throwable e) throws PackageManager.NameNotFoundException {
            if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                if (DEBUG)
                {
                    Log.w("CrashHandrler", "dumpExceptionToSDcard: SDcard unmounted,skip dump exception");
                    return;
                }
            }
            File dir=new File(PATH);
            if(!dir.exists())
                dir.mkdirs();
            long current=System.currentTimeMillis();
            String time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(current));
            File file=new File(PATH+FILE_NAME+FILE_NAME_SUFFIX);
            try {
                PrintWriter writer=new PrintWriter(new BufferedWriter(new FileWriter(file)));
                writer.print(time);
                dumpPhoneInfo(writer);
                writer.println();
                e.printStackTrace(writer);
                writer.close();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }
        private void dumpPhoneInfo(PrintWriter writer) throws PackageManager.NameNotFoundException{
            PackageManager manager=mContext.getPackageManager();
            PackageInfo info=manager.getPackageInfo(mContext.getPackageName(),PackageManager.GET_ACTIVITIES);
            writer.print("APP Version");
            writer.print(info.versionName);
            writer.print("_");
            writer.print(info.versionCode);
            writer.print("OS Version:");
            writer.print(Build.VERSION.RELEASE);
            writer.print("_");
            writer.print(Build.VERSION.SDK_INT);
            writer.print("Vendor:");//手机制造商
            writer.print(Build.MANUFACTURER);
            writer.print("Model: ");//手机型号
            writer.print(Build.MODEL);
            writer.print("CUP ABi");//CPU型号
            writer.print(Build.CPU_ABI);
        }
        private void uploadExceptionToserver() {
        }
    }
    
    • 然后在MyApplication里面的OnCreate
      CrashHandler crashHandler=CrashHandler.getInstance();
      crashHandler.init(this);
    • 还有加上读写的权限

    相关文章

      网友评论

          本文标题:Android用户crash信息收集

          本文链接:https://www.haomeiwen.com/subject/epkokxtx.html