Junior
Öz yayım mesajınızı göndərə bilərsinizmi?
sobes.tech Süni İntellekt
AI-dan cavab
Bəli, mümkündür.
sendBroadcast() metodu istifadə olunur.
// Broadcast üçün Intent yaradırıq
val intent = Intent("com.example.MY_CUSTOM_ACTION")
// Əlavə məlumatları Intent-ə əlavə edirik (istəyə bağlı)
intent.putExtra("data_key", "some_value")
// Broadcast göndəririk
sendBroadcast(intent)
Bu mesajı almaq üçün BroadcastReceiver qeydiyyatdan keçməlidir.
Qeydiyyat statik (Manifestdə) və ya dinamik (kodda registerReceiver ilə) ola bilər.
Dinamik qeydiyyat nümunəsi:
// Broadcast üçün Filter yaradırıq
val filter = IntentFilter("com.example.MY_CUSTOM_ACTION")
// BroadcastReceiver yaradırıq
val receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
// Alınan mesajı işləyirik
val receivedData = intent?.getStringExtra("data_key")
Log.d("BroadcastReceiver", "Xüsusi broadcast alındı, məlumatlar: $receivedData")
}
}
// BroadcastReceiver-i qeydiyyatdan keçiririk
registerReceiver(receiver, filter)
// Komponent məhv olarkən qeydiyyatı ləğv etməyi unutmayın
// unregisterReceiver(receiver)
Aşağıdakı aspektləri nəzərə almaq vacibdir:
- Aydın broadcast mesajları: Android 8.0 (API səviyyəsi 26) və yuxarı versiyalar, resursların səmərəli istifadəsi üçün qeyri-müəyyən broadcast-lərə məhdudiyyətlər gətirdi. Bu versiyalarda bu cür mesajları göndərmək üçün adətən qəbul edən paketini göstərmək lazımdır (açıq broadcast).
val intent = Intent("com.example.MY_CUSTOM_ACTION") // Qəbul edən paketini göstərin (bilinirsə) intent.setPackage("com.example.receiverapp") sendBroadcast(intent) - İcazələr: Bəzi qorunan broadcast-ləri göndərmək və qəbul etmək üçün uyğun icazələr tələb oluna bilər (məsələn,
android.permission.SEND_SMS). - Yerli broadcast-lər: Yalnız bir tətbiqin daxilində mesaj göndərmək üçün
LocalBroadcastManageristifadə etmək tövsiyə olunur (indi köhnəlib, onun yerinə Flow və ya RxJava kimi digər yanaşmalar tövsiyə olunur), bu daha səmərəli və təhlükəsizdir.// Yerli broadcast göndərmək val localIntent = Intent("com.example.MY_LOCAL_ACTION") LocalBroadcastManager.getInstance(this).sendBroadcast(localIntent) // Yerli BroadcastReceiver qeydiyyatı val localReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // İşləmə } } LocalBroadcastManager.getInstance(this).registerReceiver(localReceiver, IntentFilter("com.example.MY_LOCAL_ACTION")) // Qeydiyyatı ləğv etmək // LocalBroadcastManager.getInstance(this).unregisterReceiver(localReceiver)