我试图点击按钮获取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
将所有设备日志放入其中,然后通过电子邮件发送。
但我无法得到。
任何有效的优雅方式?
答案 0 :(得分:2)
鉴于我对不再授予非系统应用程序的READ_LOGS
权限所做的评论,我建议使用标准Java MemoryHandler
的Logger
。在按钮上单击,您可以push
到目标StreamHandler
的消息(您可以使用它们将它们转储到您选择的输出缓冲区中)。
答案 1 :(得分:1)
是否可以通过单击按钮获取logcat的最后几行?
应用程序从未有过记录和支持的方式从LogCat获取任何内容。并且,正如Turix所说,things were locked down further in Android 4.2。
任何有效的优雅方式?
将数据自己记录到您控制的文件中,而不是(或除此之外)将数据记录到LogCat。