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

你需要什麼使一個過程最高的工藝,如CPU,內存設定條件爲用法等等,我想你必須遍歷每個進程提供的'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

是的..它的工作..但我認爲沒有必要**如果(processes.get(i).name.equalsIgnoreCase(「com.google.android.gms」)){**這個條件.. –

+0

此代碼doesn不做這項工作。它不會從前臺帶來最頂級的應用程序。 ProcessManager.ProcessComparator只是這樣做:p1.name.compareToIgnoreCase(p2.name);它比較字符串,這就是全部。 – mafonya

0

「應用程序與使用accesse」功能有時會滿足你的需求