Обнаружение текущего переднего плана Android-приложения
Я хотел бы написать службу Android, которая каждые 5 секунд проверяет работающее приложение переднего плана, например, если пользователь в данный момент использует Chrome, оно должно предоставить мне Chrome в качестве запущенного приложения. Когда пользователь переключается на Google Maps, он должен сообщить мне Google Maps через 5 секунд.
Я попытался использовать следующий код, чтобы получить текущее приложение переднего плана.
ActivityManager.RunningTaskInfo foregroundTaskInfo = mActivityManager.getRunningTasks(1).get(0);
String foregroundTaskPackageName = foregroundTaskInfo.topActivity.getPackageName();
Код работает хорошо, когда приложение с моим сервисом находится на переднем плане, оно возвращает имя пакета моего приложения, но когда я переключаюсь на другое приложение, оно выдает мне "com.sec.android.app.launcher"
1 ответ
Этот метод устарел в Android 5, поэтому по соображениям безопасности этот метод будет возвращать имя вашего пакета, если ваше приложение находится на переднем плане, но нет других приложений. Поскольку вы используете Android 6, я думаю, что этот метод всегда возвращает имя пакета запуска, чтобы скрыть фактическое приложение переднего плана.
Из документации:
List<ActivityManager.RunningTaskInfo> getRunningTasks (int maxNum)
Этот метод устарел на уровне API 21. Начиная с LOLLIPOP, этот метод больше не доступен для сторонних приложений: введение центрированных на документе последних означает, что он может передавать информацию о человеке вызывающей стороне. Для обратной совместимости он по-прежнему будет возвращать небольшое подмножество своих данных: по крайней мере, собственные задачи вызывающего абонента и, возможно, некоторые другие задачи, например домашние, которые, как известно, не являются чувствительными.