11

I have such a problem, I try to get data from logcat programatically. permission has also been added to manifest file:

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

Code:

    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Process process = Runtime.getRuntime().exec("logcat ActivityManager:I *:S");
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    reactOnString(line);
                }
            } catch (IOException e) {
            }
        }
    }).start();

However I cannot see when other apps are launched. I am waiting for strings like the one below but they do not appear.

2260-2566/system_process                 I/ActivityManager: Start proc com.android.email for activity com.android.email/.activity.MessageCompose: pid=6460 uid=10011 gids={50011, 3003, 1015, 1023, 1028}

P.S. This code is run in service.

Ruzard
  • 1,167
  • 3
  • 16
  • 33

2 Answers2

9

I have bad news for you: as of JB, READ_LOGS don't just work as it did anymore:

https://groups.google.com/forum/?fromgroups#!topic/android-developers/6U4A5irWang

(scroll to the post of Dianne Hackborn, an Android Develper) and this video:

Google I/O 2012 - Ten Things Game Developers Should Know

(22:47) for official sources.

However his has not been yet documented (the READ_LOGS permission doesn't report this) and is yet a source of confusion. You can only access your own logs now, and the good news is, you don't need to request permissions for it anymore (if your are targetting Jelly Beans, that's it...).

I guess it's a compromise the Android Dev team took to prevent malicious app from spying on the user, perhaps getting sensitive information (I wouldn't bet every app developer cleans it's own Log.d statements before release).

Hope this helps

Community
  • 1
  • 1
Rick77
  • 3,121
  • 25
  • 43
3

From Android Jelly Bean, applications cannot read log entries from other applications, unless your device is rooted and you read the logs as superuser.

So basically... This is the expected behavior.

I could not find any official statement in the Android documentation (someone can edit this answer if they do), but you might be interested in having a look at this answer: https://android.stackexchange.com/questions/28857/how-can-i-access-android-log-files-on-my-nexus-7-without-root-access

Community
  • 1
  • 1
personne3000
  • 1,780
  • 3
  • 16
  • 27