Junior
Може ли да пошаљете свој broadcast-у поруку?
sobes.tech АИ
Одговор од АИ
Da, moguće je.
Koristi se metoda sendBroadcast().
// Kreiramo Intent za naš broadcast
val intent = Intent("com.example.MY_CUSTOM_ACTION")
// Dodajemo dodatne podatke u Intent (neobavezno)
intent.putExtra("data_key", "some_value")
// Šaljemo broadcast
sendBroadcast(intent)
Za primanje ove poruke potrebno je registrovati BroadcastReceiver.
Registracija može biti statička (u Manifestu) ili dinamička (u kodu pomoću registerReceiver).
Primer dinamičke registracije:
// Kreiramo Filter za naš broadcast
val filter = IntentFilter("com.example.MY_CUSTOM_ACTION")
// Kreiramo BroadcastReceiver
val receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
// Obradjujemo primljenu poruku
val receivedData = intent?.getStringExtra("data_key")
Log.d("BroadcastReceiver", "Primljen vlastiti broadcast sa podacima: $receivedData")
}
}
// Registrujemo BroadcastReceiver
registerReceiver(receiver, filter)
// Ne zaboravite da odjavite registraciju pri uništenju komponente
// unregisterReceiver(receiver)
Važno je uzeti u obzir sledeće tačke:
- Jasne broadcast poruke: Android 8.0 (API nivo 26) i više je uveo ograničenja na nejasne broadcast poruke radi optimizacije potrošnje resursa. Za slanje takvih poruka u novijim verzijama Androida često je potrebno navesti paket primaoca (jasan broadcast).
val intent = Intent("com.example.MY_CUSTOM_ACTION") // Navodimo paket primaoca (ako je poznat) intent.setPackage("com.example.receiverapp") sendBroadcast(intent) - Dozvole: Za slanje i primanje broadcast poruka sa određenim nivoom zaštite (npr.
android.permission.SEND_SMS) mogu biti potrebna odgovarajuća odobrenja. - Lokalne broadcast poruke: Za prenos poruka unutar jedne aplikacije preporučuje se korišćenje
LocalBroadcastManager(sada je zastarelo, preporučuje se korišćenje drugih pristupa poput Flow ili RxJava), koji je efikasniji i sigurniji.// Slanje lokalnog broadcast-a val localIntent = Intent("com.example.MY_LOCAL_ACTION") LocalBroadcastManager.getInstance(this).sendBroadcast(localIntent) // Registracija lokalnog BroadcastReceiver-a val localReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Obrada } } LocalBroadcastManager.getInstance(this).registerReceiver(localReceiver, IntentFilter("com.example.MY_LOCAL_ACTION")) // Odjava // LocalBroadcastManager.getInstance(this).unregisterReceiver(localReceiver)