重新建库,开源大部分代码,脱敏处理
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
package cn.nahco3awa.naouc;
|
||||
|
||||
import static android.widget.Toast.LENGTH_LONG;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Environment;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.io.Writer;
|
||||
|
||||
public class MyCrashHandler implements Thread.UncaughtExceptionHandler {
|
||||
private Thread.UncaughtExceptionHandler mDefaultHandler;
|
||||
private Context mcontext;
|
||||
private static MyCrashHandler myCrashHandler;
|
||||
|
||||
private MyCrashHandler() {}
|
||||
|
||||
public static synchronized MyCrashHandler newInstance() {
|
||||
if (myCrashHandler == null)
|
||||
myCrashHandler = new MyCrashHandler();
|
||||
return myCrashHandler;
|
||||
}
|
||||
|
||||
public void init(Context context) {
|
||||
mcontext = context;
|
||||
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
|
||||
Thread.setDefaultUncaughtExceptionHandler(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void uncaughtException(@NonNull Thread t, Throwable e) {
|
||||
new AlertDialog.Builder(mcontext)
|
||||
.setTitle("未捕获的异常!")
|
||||
.setMessage(e.getMessage())
|
||||
.show();
|
||||
Toast.makeText(mcontext, e.getMessage(), LENGTH_LONG).show();
|
||||
if (!handleExample(e) && mDefaultHandler != null) {
|
||||
mDefaultHandler.uncaughtException(t, e);
|
||||
} else {
|
||||
try {
|
||||
Thread.sleep(3000);
|
||||
} catch (InterruptedException e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
android.os.Process.killProcess(android.os.Process.myPid());
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean handleExample(Throwable ex) {
|
||||
if(ex == null)
|
||||
return false;
|
||||
saveCrashInfoToFile(ex);
|
||||
return true;
|
||||
}
|
||||
|
||||
private void saveCrashInfoToFile(Throwable ex) {
|
||||
Writer writer = new StringWriter();
|
||||
PrintWriter printWriter = new PrintWriter(writer);
|
||||
ex.printStackTrace(printWriter);
|
||||
Throwable exCause = ex.getCause();
|
||||
while (exCause != null) {
|
||||
exCause.printStackTrace(printWriter);
|
||||
exCause = exCause.getCause();
|
||||
}
|
||||
printWriter.close();
|
||||
|
||||
long timeMillis = System.currentTimeMillis();
|
||||
String fileName = "crash-" + timeMillis + ".log";
|
||||
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
|
||||
String path = "/storage/emulated/0/crash_logInfo/";
|
||||
File fl = new File(path);
|
||||
if (!fl.exists()) {
|
||||
boolean ignored = fl.mkdirs();
|
||||
}
|
||||
try {
|
||||
FileOutputStream fileOutputStream = new FileOutputStream(path + fileName);
|
||||
fileOutputStream.write(writer.toString().getBytes());
|
||||
fileOutputStream.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user