在非root用户的Android上运行应用程序

时间:2016-04-27 13:47:02

标签: android android-service

我已经看过很多关于如何在Android上获取正在运行的进程的帖子,但Lolipop的情况发生了变化。现在,列表被中继为非root设备。

每篇文章都要做这样的代码:

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,我看到的是,您可以通过辅助功能服务获知应用程序启动,但如果它之后仍在运行,则不会。所以我不认为这是做这件事的好方法。

有没有人知道如何做到这一点?

1 个答案:

答案 0 :(得分: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()]);
}