package org.emdev.common.log; import android.os.Build; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.PrintWriter; import java.io.StringWriter; import java.io.Writer; import java.lang.Thread.UncaughtExceptionHandler; import java.text.SimpleDateFormat; import java.util.Date; import org.emdev.BaseDroidApp; import org.emdev.common.android.AndroidVersion; class EmergencyHandler implements UncaughtExceptionHandler { private final SimpleDateFormat SDF = new SimpleDateFormat("yyyyMMdd.HHmmss"); private final UncaughtExceptionHandler system; EmergencyHandler() { system = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(this); } @Override public void uncaughtException(final Thread thread, final Throwable ex) { processException(ex); system.uncaughtException(thread, ex); } void processException(final Throwable th) { try { final String timestamp = SDF.format(new Date()); final Writer result = new StringWriter(); final PrintWriter printWriter = new PrintWriter(result); th.printStackTrace(printWriter); final String stacktrace = result.toString(); printWriter.close(); final String name = BaseDroidApp.APP_PACKAGE + "." + BaseDroidApp.APP_VERSION_NAME + "." + timestamp + ".stacktrace"; final File filename = new File(LogManager.LOG_STORAGE, name); writeToFile(stacktrace, filename); } catch (final Exception e) { e.printStackTrace(); } } private void writeToFile(final String stacktrace, final File filename) { try { final BufferedWriter bos = new BufferedWriter(new FileWriter(filename)); bos.write("Application information:\n\n"); bos.write("This file was generated by the " + BaseDroidApp.APP_PACKAGE + "." + BaseDroidApp.APP_VERSION_NAME + "(" + BaseDroidApp.APP_VERSION_CODE + ")\n"); bos.write("\nDevice information:\n\n"); bos.write("VERSION : " + AndroidVersion.VERSION + "\n"); bos.write("BOARD : " + Build.BOARD + "\n"); bos.write("BRAND : " + Build.BRAND + "\n"); bos.write("CPU_ABI : " + BaseDroidApp.BUILD_PROPS.getProperty("ro.product.cpu.abi") + "\n"); bos.write("CPU_ABI2 : " + BaseDroidApp.BUILD_PROPS.getProperty("ro.product.cpu.abi2") + "\n"); bos.write("DEVICE : " + Build.DEVICE + "\n"); bos.write("DISPLAY : " + Build.DISPLAY + "\n"); bos.write("FINGERPRINT : " + Build.FINGERPRINT + "\n"); bos.write("ID : " + Build.ID + "\n"); bos.write("MANUFACTURER: " + BaseDroidApp.BUILD_PROPS.getProperty("ro.product.manufacturer") + "\n"); bos.write("MODEL : " + Build.MODEL + "\n"); bos.write("PRODUCT : " + Build.PRODUCT + "\n"); bos.write("\nError information:\n\n"); bos.write(stacktrace); bos.flush(); bos.close(); System.out.println("Stacktrace is written: " + filename); } catch (final Exception e) { e.printStackTrace(); } } }