Получить (реальный) процесс переднего плана с помощью activityManager.getRunningAppProcesses ()
Я пытаюсь определить видимое в данный момент приложение для пользователя. Для этого я используюactivityManager.getRunningAppProcesses()
метод.
Я знаю, что этот метод не поддерживается как Android 5.1.1 - это нормально.
В начале это работало как очарование, я перебираю список RunningAppProcessInfos и проверяю на важность.
tl; dr Как правильно получить текущий процесс переднего плана и предотвратить ложные предположения? Как устроен порядок списка - API говорит, что он не указан. Есть ли способ правильно их заказать?
Что я сделал:
К сожалению, список, возвращаемый ActivityManager, отличается на каждом устройстве. Некоторые устройства возвращают многократную информацию со значением 100 (что ЗАЯВКА), даже если процесс в настоящее время не виден.
Это вызвало проблему, что у меня было много ложных срабатываний. Например, я протестировал его с помощью Facebook и создал тост, каждый раз, когда Facebook находится на переднем плане. Я переключился на «Домой», поэтому моя программа запуска должна была быть на переднем плане. Это было в течение примерно 10 секунд, после этого, Facebook снова появился в списке со значимостью FOREGROUND (он не был открыт и не виден), и я получил ложный положительный результат.
Я узнал, что некоторые устройства упорядочивают список по недавнему процессу сверху. Поэтому я решил попробовать следующий подход:
ActivityManager.RunningAppProcessInfo appProcess = appProcesses.get(0);
final String processName = appProcess.processName;
final String packageName = removeProcessSuffix(processName);
if (appProcess.importance == FOREGROUND || appProcess.importance == VISIBLE){
//do something, like the toast
}
СappProcesses.get (0); Я изучаю только первый элемент, и ошибка исчезла. Больше никаких ложных срабатываний.
НоТеперь на некоторых устройствах я больше не получаю процесс переднего плана. Потому что они никак не упорядочивают список. Например, некоторые 4.2 смартфоны Sony являются одними из кандидатов. Я получаю список, но реально видимый в данный момент процесс находится в индексе 11 или около того.
Я понятия не имею, что делать, чтобы получить текущий процесс переднего плана, без ложных срабатываний.
Как правильно выбрать текущий процесс на переднем плане и предотвратить ложные предположения? Как устроен порядок списка - API говорит, что он не указан. Есть ли способ правильно их заказать?
Спасибо!