0

我试图从我创建的服务中查看当前在前台/用户正在使用的应用程序或活动:

 ActivityManager am = (ActivityManager) getApplicationContext().getSystemService(
                        Context.ACTIVITY_SERVICE);

                List<ActivityManager.RunningAppProcessInfo> processList = am.getRunningAppProcesses();
String cProcess = processList.get(0).processName;

但这有时会显示 com.android.systemui 或 com.android.buetooth 之类的服务,即使在前台有不同的活动时也是如此。

我想这是检查服务而不是活动.. 有没有更好更可靠的方法来查看当前处于前台的应用程序?

4

3 回答 3

2

我认为这activityManager.getRunningTasks()更符合您的要求,尽管请注意 Android 开发人员警告不要ActivityManager为您的应用程序使用任何核心功能。

于 2012-10-25T16:00:49.887 回答
0

尝试检查过程的重要性:

List<RunningAppProcessInfo> appProcesses= null;
appProcesses = activityManager.getRunningAppProcesses();
if (appProcesses!=null) {

    for (RunningAppProcessInfo appProcess : appProcesses) {
        if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
            // Log.d("MYTAG",appProcess.processName+":"+appProcess.importance+" is foreground");
        }
    }
}
于 2012-10-25T16:09:30.897 回答
0

这就像一个魅力......感谢JRaymond:

ActivityManager am = (ActivityManager) getApplicationContext().getSystemService(
                    Context.ACTIVITY_SERVICE);

            List<ActivityManager.RunningTaskInfo> processList = am.getRunningTasks(3);


            String cProcess = processList.get(0).baseActivity.getPackageName();
于 2012-10-25T16:12:24.427 回答