public class CrashApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
MyUncaughtExceptionHandler handler = MyUncaughtExceptionHandler.getInstance();
handler.init(getApplicationContext());
Thread.currentThread().setUncaughtExceptionHandler(handler);
}
}
public class MyUncaughtExceptionHandler implements UncaughtExceptionHandler {
private static MyUncaughtExceptionHandler handler;
private Context context;
private MyUncaughtExceptionHandler() {
}
public static synchronized MyUncaughtExceptionHandler getInstance() {
if (handler == null) {
handler = new MyUncaughtExceptionHandler();
return handler;
} else {
return handler;
}
}
public void init(Context context) {
this.context = context;
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
try {
System.out.println("发生错误!");
StringBuilder sb = new StringBuilder();
//获取版本号
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
String versionName = packageInfo.versionName;
sb.append("程序的版本号:" + versionName).append("\n");
//获取设备信息
Field[] fields = Build.class.getDeclaredFields();
for(int i=0;i<fields.length;i++){
fields[i].setAccessible(true);
String name = fields[i].getName();
String value = fields[i].get(null).toString();
sb.append(name+" = "+value).append("\n");
}
//获取错误信息
StringWriter wr = new StringWriter();
PrintWriter err = new PrintWriter(wr);
ex.printStackTrace(err);
String msg = wr.toString();
sb.append(msg);
System.out.println(sb.toString());
//上传服务器(未实现)
} catch (Exception e) {
e.printStackTrace();
}
//进程自杀
android.os.Process.killProcess(android.os.Process.myPid());
}
}