Получить (реальный) процесс переднего плана с помощью 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 говорит, что он не указан. Есть ли способ правильно их заказать?

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос