Vittorio Cozzolino
Vittorio Cozzolino

Reputation: 941

Wrong output with logcat inside my application

I'm developing a multi-tab application. In one of the tab I want to show the logcat but I have a lot of problem running it correctly.

Right now I'm using the following command but I don't get anything in my TextView. :

Process process = Runtime.getRuntime().exec("/system/bin/logcat -s com.vittorio:I");

But when I run the same command into Terminal it works flawlessy.

I've also tryed this other command :

Process process = Runtime.getRuntime().exec("/system/bin/logcat *:I");

but for some reason it prints also Debug level messages ...

EDIT (1):

I've by-passed the problem by adding an high-level filter (java) to the whole log.. so I only print in my textview what I need. It's a very dirty solution but for now is the only one I managed to come with.

I would like to point out that I'me experiencing different behaviours on my phones :

EDIT (2) - SOLVED (NEED ROOTED PHONE):

After some struggling I managed to solve my problem. Actually navigating through the init.rc system file I saw that the permissions for /dev/log/main and /dev/log/system where setted to 620.. that's why I couldn't open the log on some of my phones. So I rooted also my Nexus One and added this commands into my activity before calling the logcat command :

Process process_su = Runtime.getRuntime().exec("su");
Process process_ch = Runtime.getRuntime().exec("chmod 777 /dev/log/main");

Done! :D

Hope this info will help anyone who will face my same issue.

Upvotes: 1

Views: 1170

Answers (1)

Francois Morier-Genoud
Francois Morier-Genoud

Reputation: 659

You have to use this permission :

<uses-permission android:name="android.permission.READ_LOGS" />

and then you can use that snippet i found

    try {
      Process process = Runtime.getRuntime().exec("logcat -v");

      BufferedReader bufferedReader = new BufferedReader(
      new InputStreamReader(process.getInputStream()));

      StringBuilder logString=new StringBuilder();
      String line;

      while ((line = bufferedReader.readLine()) != null) {
        logString.append(line);
      }

      TextView tv = (TextView)findViewById(R.id.logTextView);
      tv.setText(logString.toString());

    } catch (IOException e) {

    }

I didn't try it but it seems correct

Upvotes: 1

Related Questions