Sobes.tech
Junior

Czym jest BroadcastReceiver w Androidzie?

sobes.tech AI

Odpowiedź od AI

To jest komponent, który reaguje na systemowe lub użytkownika broadcasty. Nie posiada interfejsu użytkownika i jest przeznaczony do wykonywania operacji w tle w odpowiedzi na określone zdarzenia.

Główne cechy:

  • Reaguje na intencje (Intents) z określoną akcją (action).
  • Krótkotrwały komponent, jego metoda onReceive() jest wykonywana przez krótki czas.
  • Nie jest przeznaczony do długotrwałych operacji. Jeśli wymagana jest dłuższa praca, należy uruchomić Service z onReceive().
  • Może być zarejestrowany statycznie w manifeście lub dynamicznie w kodzie.

Przykłady użycia:

  • Reagowanie na zmiany stanu sieci (android.net.conn.CONNECTIVITY_CHANGE).
  • Reagowanie na uruchomienie systemu (android.intent.action.BOOT_COMPLETED).
  • Obsługa przychodzących SMS-ów.
  • Odbieranie wiadomości wysłanych przez inne komponenty aplikacji lub inne aplikacje.

Rejestracja w manifeście:

<receiver android:name=".MyBroadcastReceiver"
          android:exported="true"> // exported="true" aby inne aplikacje mogły wysyłać intents
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

Rejestracja w kodzie:

// W Activity lub Service
IntentFilter filter = new IntentFilter("com.example.MY_CUSTOM_ACTION");
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
registerReceiver(receiver, filter);

// W onDestroy() lub onStop() - ważne jest odwołanie rejestracji!
unregisterReceiver(receiver);

Klasa BroadcastReceiver:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Kod wykonywany przy otrzymaniu Intent
        // Na przykład:
        if ("com.example.MY_CUSTOM_ACTION".equals(intent.getAction())) {
            Toast.makeText(context, "Otrzymano akcję niestandardową!", Toast.LENGTH_SHORT).show();
        }
    }
}