Я хочу прочитать файл журнала уровня системы Android. Поэтому я использую следующий код:
Process mLogcatProc = null;
BufferedReader reader = null;
try {
mLogcatProc = Runtime.getRuntime().exec(
new String[] { "logcat", "-d",
"AndroidRuntime:E [Your Log Tag Here]:V *:S" });
reader = new BufferedReader(new InputStreamReader(mLogcatProc
.getInputStream()));
String line;
final StringBuilder log = new StringBuilder();
String separator = System.getProperty("line.separator");
while ((line = reader.readLine()) != null) {
log.append(line);
log.append(separator);
}
}
catch (IOException e) {}
finally {
if (reader != null)
try {
reader.close();
} catch (IOException e) {}
}
Я также использовал в AndroidManifest.xml. Но я не могу прочитать ни одной строки. Журнал StringBuilder пуст. И метод mlogcatProc.waitFor return 0.
Итак, как я могу прочитать журнал?
Код в исходном сообщении работает, если вы добавляете правильное разрешение на ваш AndroidManifest.xml
<uses-permission android:name="android.permission.READ_LOGS" />
PS: Вы, конечно же, должны заменить "[Your Log Tag Here]" в своем коде своей фактической TAG; -)
не может делать это из обычного (несатого) приложения Android.
Это связано с тем, что процесс должен запускаться как root (или из adb) для чтения файла logcat на Android. Если на вашем [корневом] телефоне установлен эмулятор терминала, попробуйте запустить logcat - он запрещает вам разрешение на буфер журнала, если вы не используете его для root.
Причина, по которой ваш StringBuffer заканчивается пустым, заключается в том, что процесс выводит сообщение об ошибке в stderr (и вы читаете stdin через BufferedReader).
Посмотрите на источник для LogCollector, у вас должно быть решение вашей проблемы. http://code.google.com/p/android-log-collector/