猿问

需要处理未处理的异常并发送日志文件

需要处理未处理的异常并发送日志文件

当我的应用程序创建一个未处理的异常时,而不是简单地终止,我想首先给用户一个发送日志文件的机会。我意识到在得到随机异常后做更多的工作是有风险的,但是,最糟糕的是应用程序已经崩溃,日志文件没有发送。这比我预期的要复杂得多:)

工作原理:(1)捕获未知异常,(2)提取日志信息并写入文件。

不起作用的是:(3)开始发送电子邮件的活动。最终,我还有另一个活动需要用户的许可。如果我让电子邮件活动正常工作,我不希望给对方带来太大的麻烦。

问题的症结在于,未处理的异常在我的Application类中被捕获。因为这不是一个活动,所以如何使用Intent.ACTION_Send启动一个活动并不明显。也就是说,通常启动一个叫做startActivity并使用onActivityResult的活动。这些方法由活动支持,但不受应用程序的支持。

对如何做到这一点有什么建议吗?

下面是一些代码片段作为开始指南:

public class MyApplication extends Application{
  defaultUncaughtHandler = Thread.getDefaultUncaughtExceptionHandler();
  public void onCreate ()
  {
    Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler()
    {
      @Override
      public void uncaughtException (Thread thread, Throwable e)
      {
        handleUncaughtException (thread, e);
      }
    });
  }

  private void handleUncaughtException (Thread thread, Throwable e)
  {
    String fullFileName = extractLogToFile(); // code not shown

    // The following shows what I'd like, though it won't work like this.
    Intent intent = new Intent (Intent.ACTION_SEND);
    intent.setType ("plain/text");
    intent.putExtra (Intent.EXTRA_EMAIL, new String[] {"me@mydomain.com"});
    intent.putExtra (Intent.EXTRA_SUBJECT, "log file");
    intent.putExtra (Intent.EXTRA_STREAM, Uri.parse ("file://" + fullFileName));
    startActivityForResult (intent, ACTIVITY_REQUEST_SEND_LOG);
  }

  public void onActivityResult (int requestCode, int resultCode, Intent data)
  {
    if (requestCode == ACTIVITY_REQUEST_SEND_LOG)
      System.exit(1);
  }}


千万里不及你
浏览 305回答 3
3回答
随时随地看视频慕课网APP

相关分类

Android
我要回答