Определить текущее приложение Android на переднем плане - PullRequest
0 голосов
/ 19 мая 2018

Я хотел бы написать службу 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 Ответ

0 голосов
/ 20 мая 2018

Этот метод устарел в Android 5, поэтому по соображениям безопасности этот метод будет возвращать имя вашего пакета, если ваше приложение находится на переднем плане, но нет других приложений.Поскольку вы используете Android 6, я полагаю, что этот метод всегда возвращает имя пакета запуска, чтобы скрыть фактическое приложение переднего плана.

Из документации :

List<ActivityManager.RunningTaskInfo> getRunningTasks (int maxNum)

Этот метод устарел на уровне API 21. Начиная с LOLLIPOP, этот метод больше не доступен для сторонних приложений: введение документов-центрированных остатков означает, что он может передавать информацию о человеке вызывающей стороне.Для обратной совместимости он по-прежнему будет возвращать небольшое подмножество своих данных: по крайней мере, собственные задачи вызывающего абонента и, возможно, некоторые другие задачи, например домашние, которые, как известно, не являются чувствительными.

...