获取最近和正在运行的应用程序列表而不是进程

Posted

技术标签:

【中文标题】获取最近和正在运行的应用程序列表而不是进程【英文标题】:Get Recent and Running application list not processes 【发布时间】:2012-09-04 19:01:42 【问题描述】:

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

我查看了有关此问题的所有 *** 问题,但我得到的唯一答案是关于正在运行的进程和最近的任务,而不是我们在三星移动任务管理器中长按主页按钮时看到的特定应用程序。

我可以通过这段代码获得正在运行的进程:

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

for(RunningAppProcessInfo runningProInfo:procInfos)

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

它给出了所有进程的包名,但我只想要我已经启动的应用程序的包名(最近和正在运行)。

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

【问题讨论】:

我能知道为什么它被否决了吗? 【参考方案1】:

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

使用getRunningTasks 将返回一个RunningTaskInfo 列表,其中包含基本ComponentName,您可以通过调用getPackageName() 从中获取包名称。

原始答案:

您应该查看getRecentTasks。其功能描述为

返回用户最近启动的任务列表,其中 最新的依次是第一个和较旧的。

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

这应该会为您提供最近运行或正在运行的所有应用程序的列表。

【讨论】:

我已经尝试过了,它返回一个RecentTaskInfo 对象列表,但我无法从对象中获取应用程序名称和其他信息? 更新了答案。正在运行的任务与最近的任务不同,但它是关闭的,因为它包括用户离开并认为已关闭但实际上仍在后台运行或冻结的任务。 RecentTask 怎么样,还有一个 origactivity,我们可以从中获取包名,但我知道为什么它总是给出 null ? baseintent 给了我包含包的意图信息,但是当我调用函数 getPackageName 时它返回 null 为什么? 如果活动被冻结并且系统清理了它正在使用的资源,则包名称和 baseIntent 可能为空。我找不到任何方法来获取更可靠的包裹数据。我会再调查一下。【参考方案2】:

最近你可以从返回RecentTaskInfo的getRecentTasks获取。

【讨论】:

我已经尝试过了,它返回一个RecentTaskInfo 对象列表,但我无法从对象中获取应用程序名称和其他信息?【参考方案3】:

对于 api 级别

您需要此权限:

<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();
    

【讨论】:

以上是关于获取最近和正在运行的应用程序列表而不是进程的主要内容,如果未能解决你的问题,请参考以下文章

获取正在运行的进程列表

标准用户(XP/Server 2003及以下)如何获取所有运行进程的镜像路径?

C ++获取正在运行的进程的DLL的基地址

如何使用 PowerShell 或 VBScript 获取正在运行的应用程序列表

如何检查正在运行的进程是不是是后台进程? [关闭]

RecentsActivity 是如何响应杀进程事件的