是否可以通过单击按钮获取logcat的最后几行?

时间:2014-04-03 07:12:27

标签: android android-logcat

我试图点击按钮获取Logcat(至少最后几行)但没有出现 -

view.findViewById(R.id.logdone).setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // Make file name.
        String fullName = "userlogs";

        // 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;
        }
      }
   }

注意:

我有权限 -

<uses-permission android:name="android.permission.READ_LOGS" />

更新

我的大部分内容都在Log.d()然后是Log.v(),然后是Log.e(),然后是Log.i()。但是如何通过单击按钮获取最后一个事件行。我的目的是获取这些行并通过电子邮件发送给开发人员。

我使用流行的第三方API ACRA来发送工作正常的电子邮件。 我可以使用StringBuilder将所有设备日志放入其中,然后通过电子邮件发送。 但我无法得到。

任何有效的优雅方式?

2 个答案:

答案 0 :(得分:2)

鉴于我对不再授予非系统应用程序的READ_LOGS权限所做的评论,我建议使用标准Java MemoryHandlerLogger。在按钮上单击,您可以push到目标StreamHandler的消息(您可以使用它们将它们转储到您选择的输出缓冲区中)。

答案 1 :(得分:1)

  

是否可以通过单击按钮获取logcat的最后几行?

应用程序从未有过记录和支持的方式从LogCat获取任何内容。并且,正如Turix所说,things were locked down further in Android 4.2

  

任何有效的优雅方式?

将数据自己记录到您控制的文件中,而不是(或除此之外)将数据记录到LogCat。