【问题标题】:How can I send the log file of the android device via email from inside my app?如何从我的应用程序内部通过电子邮件发送 android 设备的日志文件?
【发布时间】:2013-11-08 08:27:29
【问题描述】:

作为错误报告,我想将设备和/或应用程序日志发送到电子邮件帐户。为此,我在我的视图中准备了一个按钮。有人可以帮我解决这个问题,我该如何检索日志文件?

谢谢

【问题讨论】:

  • 不用自己构建,你可以看看ACRA
  • 好的,但我希望能够始终发送文件。这就是为什么我想手动完成
  • Google 从未支持此功能,并且自 Android 4.1 起已被积极阻止。以下答案中显示的技术最多将为您提供您自己在 Android 4.1+ 上的日志文件条目。

标签: android


【解决方案1】:
            String separator = System.getProperty("line.separator");
            try {
                Process process = Runtime.getRuntime().exec("logcat -d");
                BufferedReader bufferedReader = new BufferedReader(
                        new InputStreamReader(process.getInputStream()));

                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    log.append(line);
                    log.append(separator);
                }
            } catch (Exception e) {

            }

【讨论】:

  • 您的示例中的变量 log 是什么?以及如何通过电子邮件发送此内容?
  • 它不起作用,我用上面的代码试了一下,并为日志变量使用了 StringBuffer。这个 StringBuffer 的内容是 0,所以没有任何东西写入我的日志。知道为什么吗?
  • 找到了,忘记在我的清单中添加
【解决方案2】:

这是一个略微改进的版本,改编自 Ramesh(谢谢)。主要区别是自己做缓冲。速度很快。

  private void extractLogToFile()
  {
    // Make file name.
    String fullName = ...;

    // Extract to file.
    File file = new File (fullName);
    InputStreamReader reader = null;
    FileWriter writer = null;
    try
    {
      // get input stream
      String cmd = "logcat -d -v time";
      Process process = Runtime.getRuntime().exec(cmd);
      reader = new InputStreamReader (process.getInputStream());

      // write output stream
      writer = new FileWriter (file);
      char[] buffer = new char[10000];
      do 
      {
        int n = reader.read (buffer, 0, buffer.length);
        if (n == -1)
            break;
        writer.write (buffer, 0, n);
      } while (true);

      reader.close();
      writer.close();
    }
    catch (IOException e)
    {
      if (writer != null)
          try {
            writer.close();
        } catch (IOException e1) {
        }
      if (reader != null)
          try {
            reader.close();
        } catch (IOException e1) {
        }
      e.printStackTrace();
      return;
    }
  }

【讨论】:

    猜你喜欢
    • 2015-07-27
    • 2014-11-04
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多