Android 是否可以通过点击按钮获得logcat的最后几行?
我试图通过点击按钮获得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
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记录器/处理程序。