Назад к вопросам
Junior
119
questionbank

Что такое BroadcastReceiver в Android?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Это компонент, который реагирует на системные или пользовательские широковещательные сообщения (broadcasts). Он не имеет пользовательского интерфейса и предназначен для выполнения фоновых операций в ответ на определенные события.

Основные характеристики:

  • Реагирует на намерения (Intents) с определенным действием (action).
  • Короткоживущий компонент, его метод onReceive() выполняется в течение короткого периода.
  • Не предназначен для долгих операций. Если требуется длительная работа, следует запускать Service из onReceive().
  • Может быть зарегистрирован статически в манифесте или динамически в коде.

Примеры использования:

  • Реагирование на изменение состояния сети (android.net.conn.CONNECTIVITY_CHANGE).
  • Реагирование на загрузку системы (android.intent.action.BOOT_COMPLETED).
  • Обработка входящих SMS.
  • Получение пользовательских сообщений, отправленных другими компонентами приложения или другими приложениями.

Регистрация в манифесте:

<receiver android:name=".MyBroadcastReceiver"
          android:exported="true"> // exported="true" чтобы другие приложения могли отправлять intents
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

Регистрация в коде:

// В Activity или Service
IntentFilter filter = new IntentFilter("com.example.MY_CUSTOM_ACTION");
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
registerReceiver(receiver, filter);

// В onDestroy() или onStop() - важно отменить регистрацию!
unregisterReceiver(receiver);

Класс BroadcastReceiver:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Здесь выполняется код при получении Intent
        // Например:
        if ("com.example.MY_CUSTOM_ACTION".equals(intent.getAction())) {
            Toast.makeText(context, "Received custom action!", Toast.LENGTH_SHORT).show();
        }
    }
}