Я читаю другие сообщения и не могу понять "трюк".
Я просмотрел Log Collector, но не могу использовать отдельный APK. В основном я использую один и тот же подход, и я постоянно ничего не возвращаю обратно во входной поток процессов.
У меня есть READ_LOGS в манифесте.
Из моей активности по умолчанию я могу получить журнал, но если я переведу логику в другую деятельность или использую асинтезу, выход не будет возвращен.
этот код из моей активности по умолчанию... inline, я выгружаю его в журнал
try {
Process process = Runtime.getRuntime().exec("logcat -d");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
StringBuilder log=new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
log.append(line);
}
Log.d(LOGTAG, "Logcat: " +log.toString());
} catch (IOException e) {}
если я оберну его в асинтезу или просто встроить ее в другую активность, она ничего не возвращает
ArrayList<String> commandLine = new ArrayList<String>();
//terminate on completion and suppress everything except the filter
commandLine.add("logcat -d -s");
...
//replace asynctask with inline (could not get log in asynctask)
showProgressDialog(getString(R.string.acquiring_log_progress_dialog_message));
final StringBuilder log = new StringBuilder();
BufferedReader bufferedReader = null;
try{
Process process = Runtime.getRuntime().exec(commandLine.toArray(new String[0]));
bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = bufferedReader.readLine()) != null){
log.append(line);
log.append(MangoApp.LINE_SEPARATOR);
}
sendIntent.putExtra(Intent.EXTRA_TEXT, log.toString());
startActivity(Intent.createChooser(sendIntent, getString(R.string.chooser_title)));
dismissProgressDialog();
dismissMainDialog();
finish();
}
catch (IOException e){
dismissProgressDialog();
showErrorDialog(getString(R.string.failed_to_get_log_message));
Log.e(LOGTAG, "Log collection failed: ", e);//$NON-NLS-1$
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException ignore) {}
}
}
Может ли кто-нибудь определить разницу или объяснить магию? Я почти уверен, что во второй версии правильная строка так покраснела. Я использую 2.1 SDK 7 на эмуляторе.
Спасибо
Можете ли вы попробовать его без ArrayList. Просто передайте команду String Я реализовал его следующим образом (без ArrayList). Это работает для меня.
String baseCommand = "logcat -v time";
baseCommand += " MyApp:I "; // Info for my app
baseCommand += " *:S "; // Silence others
ServicesController.logReaderProcess = Runtime.getRuntime().exec(baseCommand);
Надеемся, что это будет полезно, вам не нужно создавать файл самостоятельно, просто выполните приведенную ниже команду, чтобы получить информацию об ошибке.
Runtime.getRuntime().exec("logcat -v time -r 100 -f /sdcard/log.txt *:E");
Параметры параметров Logcat:
-r <size in kilobytes> -> for specifying the size of file
-f <filename> -> file to which you want to write the logs.