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