检测当前前台android应用程序

时间:2018-05-19 20:04:21

标签: android android-activitymanager

我想编写一个android服务,每隔5秒检查当前运行的前台应用程序,例如:如果用户当前正在使用Chrome,则应该将Chrome作为正在运行的应用。当用户切换到谷歌地图时,它应该在5秒后告诉我谷歌地图。

我尝试使用以下代码来获取当前的前台应用程序。

ActivityManager.RunningTaskInfo foregroundTaskInfo = mActivityManager.getRunningTasks(1).get(0);
String foregroundTaskPackageName = foregroundTaskInfo.topActivity.getPackageName();

当我的服务的应用程序在前台时,代码运行良好,它返回我的应用程序的包名称但是当我切换到另一个应用程序时,它给了我" com.sec.android.app.launcher& #34;

1 个答案:

答案 0 :(得分:0)

此方法在Android 5中已弃用,因此出于安全原因,如果您的应用位于前台,则此方法将返回您的包名称,但不会返回其他应用。由于您使用的是Android 6,我猜这个方法总是返回启动程序包名称来隐藏实际的前台应用程序。

来自documentation

List<ActivityManager.RunningTaskInfo> getRunningTasks (int maxNum)
  

此方法在API级别21中已弃用。   从LOLLIPOP开始,此方法不再适用于第三方应用程序:引入以文档为中心的最新版本意味着它可以将人员信息泄露给调用者。为了向后兼容,它仍将返回其数据的一小部分:至少是调用者自己的任务,以及可能已知不敏感的其他一些任务,如home。