Как активировать BroadcastReceiver в приложении, когда оно не открыто или находится в фоновом режиме?

Как настроить BroadcastReceiver в приложении на Android 13, чтобы он продолжал работать независимо от того, на переднем ли плане находится приложение или нет?
  • 8 апреля 2024 г. 16:09
Ответы на вопрос 3
Для того чтобы BroadcastReceiver продолжал работать независимо от того, находится ли приложение на переднем плане или нет, можно использовать так называемые "зарегистрированные в манифесте" BroadcastReceivers. 

Для настройки BroadcastReceiver в манифесте приложения, необходимо добавить соответствующий элемент <receiver> в файл AndroidManifest.xml. Например:

```xml
<receiver android:name=".MyBroadcastReceiver" android:enabled="true" android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>
```

Здесь установлен фильтр на действие BOOT_COMPLETED, что означает, что приложение будет получать уведомление после завершения загрузки устройства. 

Таким образом, BroadcastReciever будет активироваться даже когда приложение закрыто или находится в фоновом режиме.

Не забудьте добавить разрешение в манифесте для данного действия:

```xml
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
```

После настройки BroadcastReceiver в манифесте, он будет работать независимо от активности приложения.
Начиная с 12го закручивают гайки в плане безопасности. Смс не моя тема, но краем глаза видел упоминание, что есть новый функционал. Получить доступ к коду активации из смс. Почитайте.  Может подписку на получение всех и оставили.. 

По аналогии с другими что нибудь типа Foreground_sms_...
Точно не помню какие там нюансы с BroadcastReceiver, давно этот вопрос изучал. По памяти - там его можно заставить работать, но только по моему если устройство активно и экран включен. Для этого надо в манифесте написать 
<uses-permission android:name="android.permission.QUICKBOOT_POWERON" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

и соответствующие системные разрешения запросить и получить.
Иной способ это использовать какой то шедулер для того, чтобы периодически запускать сервис и проверять нужное состояние: WorkManager, JobScheduler или AlarmManager
Похожие вопросы