Junior
Cum să conectezi un BroadcastReceiver pentru a primi mesaje în Android?
sobes.tech AI
Răspuns de la AI
Există două metode principale:
-
Înregistrare dinamică:
- Se înregistrează și se dezînregistrează programatic în cod.
- Durează atât timp cât obiectul care l-a înregistrat este activ.
- Se folosește pentru evenimente care nu trebuie să fie primite în mod constant sau când aplicația nu este activă (de exemplu, la schimbarea orientării, nivelul bateriei).
// În Activity sau Fragment private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Procesarea mesajului primit intent?.action?.let { action -> when (action) { Intent.ACTION_BATTERY_CHANGED -> { // Procesarea schimbării bateriei } // Alte acțiuni } } } } override fun onResume() { super.onResume() val intentFilter = IntentFilter().apply { addAction(Intent.ACTION_BATTERY_CHANGED) // Alte acțiuni } registerReceiver(receiver, intentFilter) } override fun onPause() { super.onPause() unregisterReceiver(receiver) } -
Înregistrare statică:
- Este declarată în fișierul de manifest (
AndroidManifest.xml). - Durează mai mult decât ciclul de viață al componentei care a înregistrat-o. Poate primi mesaje chiar și atunci când aplicația nu este activă (pentru unele acțiuni, cu limitări în ultimele versiuni de Android).
- Se folosește pentru evenimentele sistemului care trebuie să fie primite în mod constant (de exemplu, la pornirea dispozitivului).
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapp"> <application ...> <receiver android:name=".MyBroadcastReceiver" android:exported="true"> <!-- Important pentru Android 12+ --> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.AIRPLANE_MODE" /> <!-- Alte acțiuni --> </intent-filter> </receiver> ... </application> </manifest>// Clasa BroadcastReceiver class MyBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Procesarea mesajului primit intent?.action?.let { action -> when (action) { Intent.ACTION_BOOT_COMPLETED -> { // Procesarea la finalizarea pornirii } Intent.ACTION_AIRPLANE_MODE_CHANGED -> { // Procesarea schimbării modului avion } // Alte acțiuni } } } } - Este declarată în fișierul de manifest (