在非 root Android 上获取 运行 个应用程序

Get Running Applications on a non rooted Android

我看过很多关于如何在 Android 上获取 运行 进程的 post,但是随着 Lolipop 的出现,情况发生了变化。现在该列表已针对非根设备进行中继。

每个post都要做这样的代码:

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 service here in this post: How to check current running applications in Android?

我检查了 API,我看到的是您可以通过无障碍服务获悉应用程序启动,但如果之后仍然 运行 则不会。所以我认为这不是一个好方法。

有人知道怎么做吗?

在 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()]);
}