获取当前运行的应用程序

3

我该如何获取当前正在运行的应用程序?

我想检查服务中应用程序是否在运行。我使用了以下代码进行检查。

       ActivityManager activityManager =
       (ActivityManager)
       this.getSystemService(ACTIVITY_SERVICE );

   PackageManager pm =getPackageManager();
   procInfos = activityManager.getRunningAppProcesses();

但是它返回给我多个应用程序的列表,即使我在它们的主屏幕上按下返回按钮。正在运行的应用程序列表仍然显示它们在列表中。但我希望该列表仅显示前台应用程序。

那么,如何区分前台和后台运行的应用程序?

换句话说,如何检测当前前台运行的应用程序,或者哪些应用程序没有被销毁。我不想获取后台运行的应用程序。


1
我可以告诉你的一件事是,在应用程序主屏幕上按返回键会调用onStop而不是onDestroy,这就是为什么它们仍然显示的原因。这个链接也许会有所帮助。 - Mxyk
你可能会对这个感兴趣:https://dev59.com/u3E95IYBdhLWcg3wbtXO - ekholm
1个回答

7
您可以尝试这段代码,它会返回当前活动屏幕的包名:
ActivityManager am = (ActivityManager) this
                .getSystemService(ACTIVITY_SERVICE);

// get the info from the currently running task
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);

ComponentName componentInfo = taskInfo.get(0).topActivity;
if(!componentInfo.getPackageName().equals("your.package.name"))
{
    //Do your stuff
}

您可能需要获得权限

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

3
“ActivityManager#getRunningTasks()”在API 21中已被弃用,而且现在甚至不能返回正确的结果了(由于安全原因功能受限制)。 - Vicky Chijwani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接