4

I have gone through this question and this question. But with the help of this library i can now get the list of foreground tasks using following code.

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { //For versions less than lollipop
            ActivityManager am = ((ActivityManager) getSystemService(ACTIVITY_SERVICE));
            List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(5);
            top = taskInfo.get(0).topActivity.getPackageName();
            Log.v(TAG, "top app = " + top);
        }else{ //For versions Lollipop and above
            List<AndroidAppProcess> processes = ProcessManager.getRunningForegroundApps(getApplicationContext());
            Collections.sort(processes, new ProcessManager.ProcessComparator());
            for (AndroidAppProcess process : processes) {
                if (process.foreground) {
                    top =process.name;
                    Log.v(TAG,top);
                }
            }
        }

Here, for Android 5.0+, i get all running foreground process but i'm unable to conclude which app is the top app.

Output for above code (for else condition)

com.android.vending
com.google.android.gms
com.google.android.googlequicksearchbox
com.google.android.videos
com.test1
com.naag.testing
com.example.android.gettask

Here my top app is com.google.android.videos

Now how to decide com.google.android.videos is the top app from the above list programmatically?

How does applocker (or similar to applocker) app works on 5.0+? Hope someone helps which will be helpful for someone.

Community
  • 1
  • 1
Nagaraj Alagusundaram
  • 2,304
  • 2
  • 24
  • 31
  • You need to set criteria as to what makes a Process Top process, like the CPU, Memory usage, etc., I guess you'll have to iterate through the `statm` provided by each of the processes to find that out. – asgs Nov 25 '15 at 14:16

2 Answers2

3

So here is an update. Tested in 5.0 and 5.1.1 device. Working perfectly.

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { //For versions less than lollipop
            ActivityManager am = ((ActivityManager) getSystemService(ACTIVITY_SERVICE));
            List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(5);
            top = taskInfo.get(0).topActivity.getPackageName();
            Log.v(TAG, "top app = " + top);
        }else{ //For versions Lollipop and above
            List<AndroidAppProcess> processes = ProcessManager.getRunningForegroundApps(getApplicationContext());
            Collections.sort(processes, new ProcessManager.ProcessComparator());
            for (int i = 0; i <=processes.size()-1 ; i++) {
                if(processes.get(i).name.equalsIgnoreCase("com.google.android.gms")) { //always the package name above/below this package is the top app
                    if ((i+1)<=processes.size()-1) { //If processes.get(i+1) available, then that app is the top app
                        top = processes.get(i + 1).name;
                    } else if (i!=0) { //If the last package name is "com.google.android.gms" then the package name above this is the top app
                        top = processes.get(i - 1).name;
                    } else{
                        if (i == processes.size()-1) { //If only one package name available
                            top = processes.get(i).name;
                        }
                    }
                    Log.v(TAG, "top app = " + top);
                }
            }
        }

Thanks to this library

Now i'm able to get foreground task in Android 5.0+

Nagaraj Alagusundaram
  • 2,304
  • 2
  • 24
  • 31
  • yes.. its working..But I think no need **if(processes.get(i).name.equalsIgnoreCase("com.google.android.gms")) {** this condition.. – Ranjithkumar Apr 20 '16 at 13:17
  • This code doesn't do the work. It doesn't bring the top most application from foreground. ProcessManager.ProcessComparator just does this: p1.name.compareToIgnoreCase(p2.name); It compares strings and that's all. – mafonya Apr 05 '17 at 08:01
0

The "apps with usage accesse" feature sometimes can meet your needs

Luis404
  • 87
  • 7