Junior
Hoe verbind je een BroadcastReceiver om berichten te ontvangen in Android?
sobes.tech AI
Antwoord van AI
Er zijn twee hoofdmethoden:
-
Dynamische registratie:
- Wordt programmatisch in de code geregistreerd en afgemeld.
- Blijft actief zolang het object dat het registreerde, actief is.
- Wordt gebruikt voor gebeurtenissen die niet constant hoeven te worden ontvangen of wanneer de app niet actief is (bijvoorbeeld bij het wijzigen van de oriëntatie, batterijstatus).
// In Activity of Fragment private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Verwerking van het ontvangen bericht intent?.action?.let { action -> when (action) { Intent.ACTION_BATTERY_CHANGED -> { // Verwerking van batterijwijziging } // Andere acties } } } } override fun onResume() { super.onResume() val intentFilter = IntentFilter().apply { addAction(Intent.ACTION_BATTERY_CHANGED) // Andere acties } registerReceiver(receiver, intentFilter) } override fun onPause() { super.onPause() unregisterReceiver(receiver) } -
Statische registratie:
- Wordt gedeclareerd in het manifestbestand (
AndroidManifest.xml). - Leeft langer dan de levenscyclus van de component die het registreerde. Kan berichten ontvangen, zelfs wanneer de app niet actief is (voor sommige acties, met beperkingen in de nieuwste Android-versies).
- Wordt gebruikt voor systeemgebeurtenissen die constant moeten worden ontvangen (bijvoorbeeld bij het opstarten van het apparaat).
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapp"> <application ...> <receiver android:name=".MyBroadcastReceiver" android:exported="true"> <!-- Belangrijk voor Android 12+ --> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.AIRPLANE_MODE" /> <!-- Andere acties --> </intent-filter> </receiver> ... </application> </manifest>// BroadcastReceiver-klasse class MyBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Verwerking van het ontvangen bericht intent?.action?.let { action -> when (action) { Intent.ACTION_BOOT_COMPLETED -> { // Verwerking na het voltooien van de opstart } Intent.ACTION_AIRPLANE_MODE_CHANGED -> { // Verwerking van de wijziging in vliegtuigmodus } // Andere acties } } } } - Wordt gedeclareerd in het manifestbestand (