2016-04-27 61 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

相關問題