获取最近并运行的应用程序列表不是进程

时间:2012-09-11 19:32:10

标签: android android-package-managers

我尝试了很多以获取最近和正在运行的应用程序(不是进程)的列表但是无法获得它。

我经历了关于此问题的所有stackoverflow问题,但我得到的关于运行流程和最近任务的唯一答案不是特定于应用程序,就像我们在长按主页按钮时可以在Samsung Mobile任务管理器中看到的那样。

我可以通过以下代码获取正在运行的进程:

ActivityManager actvityManager = (ActivityManager)
this.getSystemService( ACTIVITY_SERVICE );
List<RunningAppProcessInfo> procInfos = actvityManager.getRunningAppProcesses();

for(RunningAppProcessInfo runningProInfo:procInfos){

        Log.d("Running Processes", "()()"+runningProInfo.processName);
}

它提供了所有进程的软件包名称,但我只想要已启动的应用程序的软件包名称(最近和正在运行)。

如何从正在运行的应用程序进程中提取它?

3 个答案:

答案 0 :(得分:3)

更新:即使使用以下解决方案,我也看不到获取最近任务名称的方法,但这将适用于当前正在运行和冻结的任务:getRunningTasks

使用getRunningTasks会返回包含基本RunningTaskInfo的{​​{1}}列表,您可以通过调用ComponentName来获取包名称。

原始回答:

你应该研究getRecentTasks。其功能描述为

  

返回用户最近启动的任务列表   最新的是按顺序排列的第一个和更早的一个。

     

注意:此方法仅用于调试和显示任务   管理用户界面。

这可以为您提供最近运行或正在运行的所有应用的列表。

答案 1 :(得分:1)

最近,您可以从getRecentTasks获取,返回RecentTaskInfo

答案 2 :(得分:0)

对于api级别&lt; 21

您需要此权限:

<uses-permission android:name="android.permission.GET_TASKS" />

这段代码:

ActivityManager activityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RecentTaskInfo> recentTasks = activityManager.getRecentTasks(10, ActivityManager.RECENT_IGNORE_UNAVAILABLE);
for (ActivityManager.RecentTaskInfo recentTask : recentTasks) {
    try {
        String packageName = recentTask.baseIntent.getComponent().getPackageName();
        ApplicationInfo appInfo = getPackageManager().getApplicationInfo(packageName, PackageManager.GET_META_DATA);
        String label = getPackageManager().getApplicationLabel(appInfo).toString();
        Log.i("APPS", label);
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
}