4

Я прошел через этот question и этот question. Но с помощью этого library теперь я могу получить список задач переднего плана, используя следующий код.Android 5.0+ getRunningTasks устарел

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); 
       } 
      } 
     } 

Здесь для Android 5.0+ я получаю все работает на переднем плане процесс, но я не в состоянии сделать вывод, который приложение является главным приложением.

Выход для выше кода (еще условия)

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

Вот мой топ приложение com.google.android.videos

Теперь, как решить com.google.android.videos является топ приложение из приведенного выше списка программно?

Как работает приложение applocker (или аналогичное для applocker) на 5.0+? Надеюсь, кто-то поможет кому-то помочь.

+0

Вы должны установить критерии относительно того, что делает Process Top процесс, как процессор, память использование и т. д., я думаю, вам придется перебирать «statm», предоставляемый каждым из процессов, чтобы найти это. – asgs

ответ

3

Так вот это обновление. Протестировано в устройствах 5.0 и 5.1.1. Работает отлично.

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); 
       } 
      } 
     } 

Благодаря этому library

Теперь я в состоянии получить передний план задачу в Android 5.0 и выше

+0

да .. его работа..Но я думаю, не нужно ** if (процессы.get (i) .name.equalsIgnoreCase ("com.google.android.gms")) {** это условие .. –

+0

Этот код doesn Не делай работу. Он не выводит на первое место самое большое приложение. ProcessManager.ProcessComparator просто делает это: p1.name.compareToIgnoreCase (p2.name); Он сравнивает строки, и все. – mafonya

0

В «приложений с использованием accesse» функция иногда может удовлетворить ваши потребности

Смежные вопросы