Junior
Kas saab saata oma broadcast-sõnumi?
sobes.tech AI
Vastus AI-lt
Jah, see on võimalik.
Kasutatakse meetodit sendBroadcast().
// Loome Intent meie broadcasti jaoks
val intent = Intent("com.example.MY_CUSTOM_ACTION")
// Lisame täiendavaid andmeid Intentile (valikuline)
intent.putExtra("data_key", "some_value")
// Saadame broadcasti
sendBroadcast(intent)
Selle sõnumi vastuvõtmiseks on vaja registreerida BroadcastReceiver.
Registreerimine võib olla staatiline (Manifestis) või dünaamiline (koodis registerReceiver abil).
Dünaamilise registreerimise näide:
// Loome filtri meie broadcasti jaoks
val filter = IntentFilter("com.example.MY_CUSTOM_ACTION")
// Loome BroadcastReceiver
val receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
// Töötleme saadud sõnumit
val receivedData = intent?.getStringExtra("data_key")
Log.d("BroadcastReceiver", "Saadud kohandatud broadcast andmetega: $receivedData")
}
}
// Registreerime BroadcastReceiver
registerReceiver(receiver, filter)
// Ära unusta registreerimist tühistada, kui komponent on hävinud
// unregisterReceiver(receiver)
Oluline on arvestada järgmiste punktidega:
- Selged broadcast sõnumid: Android 8.0 (API tase 26) ja uuemad versioonid kehtestasid piirangud mitte-otseste broadcast sõnumite jaoks, et optimeerida ressursside kasutust. Selliste sõnumite saatmiseks uusimates Android versioonides on sageli vaja määrata saaja pakett (otsene broadcast).
val intent = Intent("com.example.MY_CUSTOM_ACTION") // Määrame saaja paketi (kui teada) intent.setPackage("com.example.receiverapp") sendBroadcast(intent) - Litsentsid: Teatud kaitse tasemega broadcast-ide saatmiseks ja vastuvõtmiseks (näiteks
android.permission.SEND_SMS) võivad olla vajalikud vastavad load. - Kohalikud broadcast-ide: Soovitatav on kasutada
LocalBroadcastManager(nüüd on see vananenud, soovitatakse kasutada muid meetodeid nagu Flow või RxJava), mis on tõhusam ja turvalisem.// Saada kohalik broadcast val localIntent = Intent("com.example.MY_LOCAL_ACTION") LocalBroadcastManager.getInstance(this).sendBroadcast(localIntent) // Registreeri kohalik BroadcastReceiver val localReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Töötlemine } } LocalBroadcastManager.getInstance(this).registerReceiver(localReceiver, IntentFilter("com.example.MY_LOCAL_ACTION")) // Registreerimise tühistamine // LocalBroadcastManager.getInstance(this).unregisterReceiver(localReceiver)