Как определить, находится ли одна из моих операций на переднем плане [дубликат]

Этот вопрос уже имеет ответ здесь:

Я реализовал BroadcastReceiver, который инициирован AlarmManager. AlarmManager инициализируется на BOOT_COMPLETED. Таким образом, я должен объявить получатель в декларации.

Моя проблема состоит в том, что я хочу, чтобы BroadcastReceiver только сделал что-то, когда ни одна из моих собственных операций не находится на переднем плане (иначе, пользователь не взаимодействует с моим приложением). Я вытягиваю информацию от удаленного сервера и не хочу уведомлять пользователя, если он в настоящее время находится в моем приложении так или иначе.

До сих пор мне не удалось найти способ определить, находится ли мое приложение на переднем плане. Существует ли способ сделать такую вещь? ActivityManager говорит мне, если мое приложение работает, но не, является ли это на переднем плане.

Проблемой является в значительной степени то же, как описано здесь: Сообщите Действию от BroadcastReceiver, ТОЛЬКО ЕСЛИ это находится на переднем плане

РЕШЕНИЕ:

После оценки нескольких решений я хочу быстро обрисовать в общих чертах то, что я думаю, лучший метод для контакта с операциями в фоне/переднем плане.

Предпочтительный путь состоит в том, чтобы зарегистрировать бытовой радиоприемник в onResume методе Вашего действия и вычеркивать из списка его на операциях по onPause. Любой сервис или другой фоновый элемент будут, чем потребность отправить широковещательное намерение с определенным действием, которое прервет Ваше действие.

Если Ваше действие будет на переднем плане, то ему зарегистрируют его поглощенный получатель и может непосредственно иметь дело с намерением, отправляют из Вашей службы. Если это не будет на переднем плане, то это не получит намерение, но сервис, который включил широковещательную передачу, будет знать, что никто не прервал ее широковещательное намерение и сможет иметь дело с этим самим. Например, это могло, чем запуск желаемое действие, показывать уведомление и т.д.

59
задан Community 23 May 2017 в 11:47
поделиться

2 ответа

Ваша активность может отслеживать свое собственное состояние относительно того, находится ли она в передний план (установите логическое значение true в onStart () , в false в onStop () ). Увы, это логическое значение не предоставляется вам в Activity автоматически.

12
ответ дан 24 November 2019 в 18:33
поделиться

ActivityManager # getRunningAppProcesses () возвращает Список RunningAppProcessInfo . Каждый RunningAppProcessInfo имеет поле, называемое важностью. значение, равное RunningAppProcessInfo.IMPORTANCE_FOREGROUND , похоже, показывает, какие действия активно наблюдаются пользователем. Существует также RunningAppProcessInfo.IMPORTANCE_VISIBLE , который ниже, но, возможно, стоит проверить.

4
ответ дан 24 November 2019 в 18:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: