Android 程序崩溃日志邮件获取

版权声明:本文为博主原创文章,未经博主允许不得转载。

在我们开发Android应用程序的时候,BUG的出现是难以避免的,时不时还会出现崩溃的情况,这个时候,我们急需知道造成问题的原因是什么,但是,在没有连接ADT或者AS的情况下,我们很难获取到崩溃的日志,当然,如果你的手机获取到了最高的root权限,可以下载一些软件来得到log,比如:ES文件浏览器等。但是,并不是所有手机都能root,而且如果是在客户在使用,种种情况下,导致我们不能及时和准确的获取到崩溃的原因,从而迅速的解决问题。基于这个原因,下面分享一个很好获取到崩溃时日志的方法

第一步:导入mail.jar

首先我们将下载好的mail.jar导入到项目中去。

第二步:初始化

在Application中进行初始化

// crash记录及上传

CrashHandler.getInstance().init(this);

第三步:开始编码CrashHandler

CrashHandler类主要用于收集错误信息 发送错误报告。

1、由于我们在很多地方都会使用到CrashHandler的对象,所以单例模式最好不过了。

/** 获取CrashHandler实例 ,单例模式 */

public static CrashHandler getInstance() {

if(INSTANCE==null) {

INSTANCE=newCrashHandler();

}

return INSTANCE;

}


2、初始化初始化,注册Context对象, 获取系统默认的UncaughtException处理器, 设置该CrashHandler为程序的默认处理器

public void init(Context ctx) {

mContext= ctx;

mDefaultHandler= Thread.getDefaultUncaughtExceptionHandler();

Thread.setDefaultUncaughtExceptionHandler(this);


3、CrashHandler需要继承UncaughtExceptionHandler接口,用于收集数据。

public class CrashHandler implements UncaughtExceptionHandler

实现UncaughtExceptionHandler的回调接口uncaughtException;

Android 程序崩溃日志邮件获取_第1张图片
图1

自定义错误处理,收集错误信息 发送错误报告等操作均在此完成. 开发者可以根据自己的情况来自定义异常处理逻辑

Android 程序崩溃日志邮件获取_第2张图片
图2

collectCrashDeviceInfo是收集程序崩溃的设备信息的方法;restart()是崩溃后重新启动应用的方法;saveCrashInfoToFile是保存错误信息到SD卡中,然后发送日志到你的邮箱中。

Android 程序崩溃日志邮件获取_第3张图片
图3
Android 程序崩溃日志邮件获取_第4张图片
图4

后续由于截图问题。没有截图完全,但是主要demo已经截完= =;

做到这里。就只差发邮件这一步了。

第四步:发邮件

这里新建了一个工具类EmailUtil用于操作发送邮件。

主要用到2个方法。不过在此之前需要注册网易邮箱,因为我使用的是smtp163服务器。

Android 程序崩溃日志邮件获取_第5张图片

由于下面的篇幅比较大,又比较重要,所以直接po了上来就没截图了。原谅新手不会用。。。

public static void SendEmail(String host,finalString address, String from,finalString password, String to, String port, String subject, String content)throwsException {

Multipart multiPart;

String finalString ="";

Properties props = System.getProperties();

props.put("mail.smtp.starttls.enable","true");

props.put("mail.smtp.host", host);

props.put("mail.smtp.user", address);

props.put("mail.smtp.password", password);

props.put("mail.smtp.port", port);

props.put("mail.smtp.auth","true");

Log.i("Check","done pops");

Session session = Session.getDefaultInstance(props,newAuthenticator() {

protectedjavax.mail.PasswordAuthentication getPasswordAuthentication() {

//此处必须做验证,才能发送邮件

returnnewjavax.mail.PasswordAuthentication(address,

password);

}

});

DataHandler handler =newDataHandler(newByteArrayDataSource(finalString.getBytes(),"text/plain"));

MimeMessage message =newMimeMessage(session);

message.setFrom(newInternetAddress(from));

message.setDataHandler(handler);

Log.i("Check","done sessions");

multiPart =newMimeMultipart();

InternetAddress toAddress;

toAddress =newInternetAddress(to);

message.addRecipient(Message.RecipientType.TO, toAddress);

Log.i("Check","added recipient");

message.setSubject(subject);

message.setContent(multiPart);

message.setText(content);

Log.i("check","transport");

Transport transport = session.getTransport("smtp");

Log.i("check","connecting");

transport.connect(host, address, password);

Log.i("check","wana send");

transport.sendMessage(message, message.getAllRecipients());

transport.close();

Log.i("check","sent");

}

到此,整个功能就完成了。其实很简单的,主要是采集崩溃信息和保存以及发送邮件。写的不好,但是能够满足需求,希望大家能够在其中获益,我也会继续。









你可能感兴趣的:(Android 程序崩溃日志邮件获取)