package com.maxiee.heartbeat.support;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.os.Build;
import android.util.Log;
import com.maxiee.heartbeat.database.api.AddCrashApi;
/**
* Created by maxiee on 15-7-11.
*
* Learning from BlackLight (https://github.com/PaperAirplane-Dev-Team/BlackLight)
*/
public class CrashHandler implements Thread.UncaughtExceptionHandler{
private static String ANDROID = Build.VERSION.RELEASE;
private static String MODEL = Build.MODEL;
private static String MANUFACTURER = Build.MANUFACTURER;
public static String VERSION = "Unknown";
private Thread.UncaughtExceptionHandler mPrevious;
private Context mContext;
public void init(Context context) {
mContext = context;
try {
PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
VERSION = info.versionName + " (" + info.versionCode + ")";
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static void register(Context context) {
new CrashHandler().init(context);
}
private CrashHandler() {
mPrevious = Thread.currentThread().getUncaughtExceptionHandler();
Thread.currentThread().setUncaughtExceptionHandler(this);
}
@Override
public void uncaughtException(Thread thread, Throwable throwable) {
String log = "";
log += "Android Version: " + ANDROID + "\n";
log += "Device Model: " + MODEL + "\n";
log += "Device Manufacturer: " + MANUFACTURER + "\n";
log += "App Version: " + VERSION + "\n";
log += "*********************\n";
log += throwable.toString() + "\n";
log += Log.getStackTraceString(throwable);
new AddCrashApi(mContext, log).exec();
if (mPrevious != null) {
mPrevious.uncaughtException(thread, throwable);
}
}
}