2016-04-27 60 views
0

我见过很多关于如何在Android上获取正在运行的进程的文章,但事情随着Lolipop而改变。现在该列表已被中继为非根设备。在非固定的Android上获取正在运行的应用程序

每一个岗位正要做这样的代码:

ActivityManager am = (ActivityManager) mContext 
      .getSystemService(Activity.ACTIVITY_SERVICE); 
    List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfo = this.getActivityManager().getRunningAppProcesses(); 
    List<ActivityManager.RunningTaskInfo> taskInfo = this.getActivityManager().getRunningTasks(Integer.MAX_VALUE); 

我试了一下,检索到的唯一的事情就是当前的应用程序。

@Stan在谈论在这个岗位这里深化发展的accessibility serviceHow to check current running applications in Android?

我查了API,和我所看到的是,你可以启动应用程序与辅助服务通知,但如果它仍然之后运行。所以我不认为这是做这件事的好方法。

有没有人有关于如何做的想法?

回答

0

在Android Lolipop中,您的代码不会像Android L以前那样工作getRunningTask将无法工作。你必须使用getAppRunningProcess。

下面是代码: -

public static String[] getActivePackagesCompat() { 
    final List<ActivityManager.RunningTaskInfo> taskInfo = mActivityManager.getRunningTasks(1); 
    final ComponentName componentName = taskInfo.get(0).topActivity; 
    final String[] activePackages = new String[1]; 
    activePackages[0] = componentName.getPackageName(); 
    return activePackages; 
} 

public static String[] getActivePackages() { 
    final Set<String> activePackages = new HashSet<String>(); 
    final List<ActivityManager.RunningAppProcessInfo> processInfos = mActivityManager.getRunningAppProcesses(); 
    for (ActivityManager.RunningAppProcessInfo processInfo : processInfos) { 
if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { 
     activePackages.addAll(Arrays.asList(processInfo.pkgList)); 
     } 
    } 
    return activePackages.toArray(new String[activePackages.size()]); 
} 
+0

嗨,这正是我开始做,但唯一的应用程序通过getRunningAppProcesses检索是我自己的应用程序。无论我在电话上做什么。 AppCompat返回我的应用或com.google.android.googlequicksearchbox。不确定要理解。 – kobe1980

+0

你应该遵循这个链接:-http://stackoverflow.com/questions/26400469/alternative-to-getrunningtasks-in-android-l –

+0

谢谢@Praween。这就是我一直在寻找的:) – kobe1980

相关问题