0

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

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

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

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

4

1 回答 1

0

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

文档

List<ActivityManager.RunningTaskInfo> getRunningTasks (int maxNum)

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

于 2018-05-19T21:26:05.230 回答