我已经看过很多关于如何在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 service:How to check current running applications in Android?
我检查了API,我看到的是,您可以通过辅助功能服务获知应用程序启动,但如果它之后仍在运行,则不会。所以我不认为这是做这件事的好方法。
有没有人知道如何做到这一点?
答案 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()]);
}