获取Android应用程序出错信息并将信息发送到指定邮件
获取Android应用程序出错信息并将信息发送到指定邮件
前段时间做过一个反馈应用程序Bug的程序,今天和大家分享下
如果想要获取应用程序的出错信息则比较简单,只需要通过实现 UncaughtExceptionHandler就可以达到目的,那么如何获取Android OS 所有应用程序的出错信息,目前的方式只有通过修改框架层来达到此目的。
(一)首先,我们先来看如何获取应用程序的出错信息:
A) 继承UncaughtExceptionHandler的类
- package org.winplus.getex;
- import java.lang.Thread.UncaughtExceptionHandler;
- import android.content.Context;
- import android.os.Looper;
- import android.util.Log;
- import android.widget.Toast;
- public class CrashHandler implements UncaughtExceptionHandler {
- private final static String TAG = "UncaughtExceptionHandler";
- private Thread.UncaughtExceptionHandler mDefaultHandler;
- private static CrashHandler mInstance;
- private Context mContext;
- private CrashHandler() {
- }
- /** 获取CrashHandler实例 ,单例模式 */
- public static CrashHandler getInstance() {
- if (mInstance == null)
- mInstance = new CrashHandler();
- return mInstance;
- }
- @Override
- public void uncaughtException(Thread thread, Throwable throwable) {
- if (!handleException(throwable) && mDefaultHandler != null) {
- // 如果用户没有处理则让系统默认的异常处理器来处理
- mDefaultHandler.uncaughtException(thread, throwable);
- } else {
- // Sleep一会后结束程序
- // 来让线程停止一会是为了显示Toast信息给用户,然后Kill程序
- try {
- Thread.sleep(3000);
- } catch (InterruptedException e) {
- Log.e(TAG, "Error : ", e);
- }
- android.os.Process.killProcess(android.os.Process.myPid());
- System.exit(10);
- }
- }
- private boolean handleException(Throwable ex) {
- if (ex == null) {
- return true;
- }
- final String msg = ex.getLocalizedMessage();
- // 使用Toast来显示异常信息
- new Thread() {
- @Override
- public void run() {
- // Toast 显示需要出现在一个线程的消息队列中
- Looper.prepare();
- Toast.makeText(mContext, "Exception:" + msg, Toast.LENGTH_LONG).show();
- Looper.loop();
- }
- }.start();
- return true;
- }
- public void init(Context context) {
- mContext = context;
- mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
- Thread.setDefaultUncaughtExceptionHandler(this);
- }
- }
B) 初始化并启动获取异常的线程类:CrashApplication
- import android.app.Application;
- public class CrashApplication extends Application {
- @Override
- public void onCreate() {
- super.onCreate();
- CrashHandler crashHandler = CrashHandler.getInstance();
- // 注册crashHandler
- crashHandler.init(getApplicationContext());
- }
- }
C) 记得修改AndroidManifest.xml文件~~~
D) 写一个用于测试的Activity
- public class GetExceptionActivity extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- int i = 1/0;//除数不能为0 这里会抛出异常
- }
- }
|
评论暂时关闭