Я реализовал BroadcastReceiver, который запускается AlarmManager. AlarmManager инициализируется на BOOT_COMPLETED. Поэтому я должен объявить получателя в манифесте.
Моя проблема в том, что я хочу, чтобы BroadcastReceiver только что-то делал, когда ни один из моих собственных действий не был на переднем плане (иначе пользователь не взаимодействует с моим приложением). Я извлекаю информацию с удаленного сервера и не хочу уведомлять пользователя, если он в настоящее время находится в моем приложении.
Пока мне не удалось найти способ определить, находится ли мое приложение на переднем плане. Есть ли способ сделать такое? ActivityManager сообщает мне, работает ли мое приложение, но не находится ли оно на переднем плане.
Проблема почти такая же, как описано здесь: Информировать активность из BroadcastReceiver ТОЛЬКО, если она находится на переднем плане
РЕШЕНИЕ:
После оценки нескольких решений я хочу быстро наметить, что, по моему мнению, лучший метод для работы с фоном/передним планом.
Предпочтительный способ - зарегистрировать широковещательный приемник в методе onResume вашей деятельности и отменить его на действия onPause. Любая служба или другой фоновый элемент не будет нуждаться в отправке намерения трансляции с определенным действием, которое ваша деятельность будет перехватывать.
Если ваша деятельность находится на переднем плане, у нее будет зарегистрирован приемник намерения, и он сможет напрямую связать с отправкой цели с вашей службы. Если он не находится на переднем плане, он не получит намерения, но служба, которая вызвала трансляцию, будет знать, что никто не перехватил ее трансляцию и не сможет справиться с ней. Например, он может запускать желаемую активность, показывать уведомление и т.д.