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

Для того чтобы BroadcastReceiver мог обрабатывать события, даже когда приложение находится в фоновом режиме или закрыто, необходимо использовать Manifest-registered receivers (зарегистрированные в манифесте).

1. **Регистрация в манифесте**: Для того чтобы BroadcastReceiver был доступен независимо от состояния приложения, необходимо зарегистрировать его в манифесте приложения. Это позволит системе Android запускать ваш BroadcastReceiver, когда поступает соответствующий Intent.

<receiver android:name=".MyBroadcastReceiver">
    <intent-filter>
        <action android:name="android.intent.action.SOME_ACTION"/>
    </intent-filter>
</receiver>

2. **Указание намерения (Intent Filter)**: В манифесте необходимо указать какие действия (actions) или типы данных (data) может обрабатывать ваш BroadcastReceiver. Это позволит системе отправлять Intent вашему BroadcastReceiver, когда необходимое событие происходит.

3. **Обработка событий**: В вашем BroadcastReceiver необходимо реализовать метод onReceive(), который будет вызываться при приходе соответствующего Intent.

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Обработка события
    }
}

4. **Особенности**:
- BroadcastReceiver, зарегистрированный в манифесте, автоматически выполняется в главном потоке (UI thread), поэтому выполнение длительных операций здесь не рекомендуется.
- После выполнения необходимых действий, ваш BroadcastReceiver должен завершить работу как можно скорее, чтобы не блокировать другие приложения.
- Некоторые события, например, BOOT_COMPLETED, могут требовать дополнительных разрешений для их обработки.

Использование BroadcastReceiver, зарегистрированного в манифесте, позволяет вашему приложению реагировать на системные события и сообщения, даже когда само приложение не активно. Тем не менее, следует быть внимательным с использованием данного механизма, чтобы избежать утечек памяти и непредвиденного поведения приложения.