Я пытаюсь определить видимое в настоящее время приложение для пользователя.
Для этого я использую метод activityManager.getRunningAppProcesses()
.
Я знаю, что этот метод не поддерживается как Android 5.1.1 - это нормально.
В начале это работало как шарм, я повторяю в списке RunningAppProcessInfos и проверьте важность.
TL;DR Каков правильный метод получения текущего процесса переднего плана и предотвращения ложных сообщений? Как выполняется порядок списка - API говорит, что он не указан. Есть ли способ правильно их упорядочить?
Что я сделал:
К сожалению, список, возвращенный ActivityManager, отличается на каждом устройстве. Некоторые устройства возвращают несколько информации с значением 100 (что является FOREGROUND), даже если процесс в настоящее время не отображается.
Это вызвало проблему, что у меня было много ложных срабатываний. Например, я тестировал его с помощью facebook и создавал тост, каждый раз facebook находится на переднем плане. Я переключился на Home, поэтому моя пусковая установка должна иметь был основным процессом. Это было как 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 говорит, что он не указан. Есть ли способ правильно их упорядочить?
Спасибо!