Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否可以通过点击按钮获得logcat的最后几行?_Android_Android Logcat - Fatal编程技术网

Android 是否可以通过点击按钮获得logcat的最后几行?

Android 是否可以通过点击按钮获得logcat的最后几行?,android,android-logcat,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 fi

我试图通过点击按钮获得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
)发送电子邮件,该API工作正常。 我可以使用
StringBuilder
将所有设备日志放入其中,然后通过电子邮件发送。 但我无法得到

有什么优雅的方法能有效地工作吗

是否可以通过点击按钮获得logcat的最后几行

对于应用程序来说,从来没有一种记录在案且受支持的方式可以从LogCat获取任何信息。而且,正如Turix所指出的那样

有什么优雅的方法能有效地工作吗


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

鉴于我对不再授予非系统应用程序的
读取日志
权限的评论,我建议改为使用带有标准Java的。单击一个按钮,您可以将消息发送到目标(您可以使用它将消息转储到您选择的输出缓冲区中)。

您可以尝试将内容放入Log.v()?我的大部分内容都在
Log.d()
然后
Log.v()
然后
Log.e()
然后
Log.i()
中。但是如何在单击按钮时获取最后的事件行。我的目的是获取这些行并通过电子邮件将它们发送给开发人员。根据这篇文章上的评论,非系统应用程序不再被授予
读取日志
权限:。您可以自己扩展日志类并保存最后一行,应该很快很简单。@somerandomusername您可以展示示例用法吗。我无法理解扩展日志类。但正如您在那些帖子中所评论的那样——“ACRA不需要读取日志。某些ACRA功能可能需要读取日志。”。那么,ACRA可以在未经许可的情况下捕获日志吗?当我运行ACRA时,我也会收到以下消息:“READ_logs Agreed!ACRA可以包含LogCat和DropBox数据。”但LogCat仍然是空的。@VedPrakash:正确。ACRA正在使用未记录且不受支持的方式读取LogCat。而且,充其量,它所能得到的只是应用程序本身记录的行数,而不是来自您可能正在使用的其他安卓系统(例如,媒体子系统)。好了,他们正在使用与您尝试的运行-
logcat
-命令相同的类型。ACRA是开源的,所以您可以自己检查并查看。要知道,以这种方式使用LogCat对您记录到自己的文件没有任何价值,并且增加了LogCat将来被进一步锁定并破坏您的代码的风险。所以我需要在我的每个类中编写标准Java Logger的日志,如
Logger.info(“我的类”)
并且不能使用我之前存在的日志,如
Log.d()
Log.e()
?@VedPrakash好吧,除此之外,您可以在包中创建自己的
Log
类,该类处理
d()
e()
等方法,并将它们转发到记录器。那么您就不必更改
Log.d()
Log.e()
等的单独用法了。@VedPrakash。。。当然,您的
d()
e()
等的实现也可以在将消息转发到
记录器之前调用
android.util.Log
类实现,以便消息同时发送到Logcat和Java记录器/处理程序。