如何从我的应用程序内部通过电子邮件发送android设备的日志文件?

如何从我的应用程序内部通过电子邮件发送android设备的日志文件?,android,Android,作为错误报告,我想将设备和/或应用程序日志发送到电子邮件帐户。为此,我在视图中准备了一个按钮。有人能帮我吗?我怎样才能检索日志文件 谢谢这里有一个稍微改进的版本,改编自Ramesh(谢谢)。主要区别在于您自己进行缓冲。很快 private void extractLogToFile() { // Make file name. String fullName = ...; // Extract to file. File file = new File

作为错误报告,我想将设备和/或应用程序日志发送到电子邮件帐户。为此,我在视图中准备了一个按钮。有人能帮我吗?我怎样才能检索日志文件


谢谢

这里有一个稍微改进的版本,改编自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;
    }
  }

您可以查看ok,而不是构建自己的,但我希望能够始终发送文件。这就是为什么我想手动完成这项工作的原因。这项工作从未得到谷歌的支持,而且从Android 4.1开始就被积极阻止。下面的答案中显示的技术最多只能在Android 4.1+上提供您自己的日志文件条目。您的示例中的变量log可能与之重复?我如何通过电子邮件发送这些内容呢?它不起作用,我用上面的代码尝试了它,并使用了一个StringBuffer作为log变量。此StringBuffer的内容为0,因此未将任何内容写入我的日志。知道为什么吗?找到了,忘了添加到我的清单上
  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;
    }
  }