检测当前前景android应用程序
我想写一个android服务,每5秒检查一次当前正在运行的前台应用程序,例如,如果用户当前正在使用Chrome,它应该给我Chrome作为正在运行的应用程序。当用户切换到谷歌地图时,它应该在5秒钟后告诉我谷歌地图 我尝试使用以下代码来获取当前的前台应用程序检测当前前景android应用程序,android,android-activitymanager,Android,Android Activitymanager,我想写一个android服务,每5秒检查一次当前正在运行的前台应用程序,例如,如果用户当前正在使用Chrome,它应该给我Chrome作为正在运行的应用程序。当用户切换到谷歌地图时,它应该在5秒钟后告诉我谷歌地图 我尝试使用以下代码来获取当前的前台应用程序 ActivityManager.RunningTaskInfo foregroundTaskInfo = mActivityManager.getRunningTasks(1).get(0); String foregroundTaskPac
ActivityManager.RunningTaskInfo foregroundTaskInfo = mActivityManager.getRunningTasks(1).get(0);
String foregroundTaskPackageName = foregroundTaskInfo.topActivity.getPackageName();
当拥有我的服务的应用程序位于前台时,代码运行良好,它返回我的应用程序的包名,但当我切换到另一个应用程序时,它会给我“com.sec.android.app.launcher”此方法在android 5中不推荐使用,因此,出于安全原因,如果您的应用程序位于前台,此方法将返回您的程序包名称,但不会返回其他应用程序。由于您使用的是Android6,我猜这个方法总是返回启动器包名称来隐藏实际的前台应用程序 发件人:
列出getRunningTasks(int maxNum)
此方法在API级别21中被弃用。
从棒棒糖开始,这种方法不再适用于第三方应用程序:以文档为中心的recents的引入意味着它可以向调用者泄露个人信息。为了向后兼容,它仍将返回其数据的一小部分:至少是调用方自己的任务,可能还有一些其他任务,例如已知不敏感的home
您是否申请了GET_TASKS权限?@MarcEstrada,是的,我已经在清单文件中添加了GET_TASKS权限您使用的是哪个设备和Android版本?我使用的是运行Android 6.0.1的三星S5,我已经回答了,因为更容易阅读引用的文本
List<ActivityManager.RunningTaskInfo> getRunningTasks (int maxNum)