7

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

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

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

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

for(RunningAppProcessInfo runningProInfo:procInfos){

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

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

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

4

3 回答 3

3

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

UsinggetRunningTasks将返回一个RunningTaskInfo包含基础的列表ComponentName,您可以通过调用getPackageName().

原始答案:

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

返回用户最近启动的任务列表,最近的是第一个,之后是较旧的。

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

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

于 2012-09-11T19:41:35.073 回答
1

最近你可以从getRecentTasks获得,它返回RecentTaskInfo

于 2012-09-11T19:42:07.677 回答
0

对于 API 级别 < 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();
    }
}
于 2016-03-03T14:51:31.533 回答