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”功能有时会满足你的需求