Чтение Logcat в приложении возвращает ноль

1

Я читаю другие сообщения и не могу понять "трюк".

Я просмотрел 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 на эмуляторе.

Спасибо

  • 1
    Я не совсем понимаю. вы выполняете команду: commandLine.toArray (новая строка [0]). Он не содержит никаких команд, кроме пустого массива строк.
  • 0
    Я должен был включить все / больше кода. Я обновил код выше, чтобы включить больше init. Строка, на которую вы ссылаетесь, преобразует массив в массив строк. Спасибо
Теги:
logcat

2 ответа

2
Лучший ответ

Можете ли вы попробовать его без 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);
  • 0
    Это работает, я, должно быть, что-то сделал, используя arraylist. работает в asynctask, что я и хотел. Thanx!
6

Надеемся, что это будет полезно, вам не нужно создавать файл самостоятельно, просто выполните приведенную ниже команду, чтобы получить информацию об ошибке.

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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню