Sobes.tech
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)