Sobes.tech
Junior

Kendi yayın mesajınızı gönderebilir misiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Evet, mümkündür.

sendBroadcast() yöntemi kullanılır.

// Yayın için bir Intent oluşturuyoruz
val intent = Intent("com.example.MY_CUSTOM_ACTION")

// İsteğe bağlı olarak Intent'e ek veriler ekliyoruz
intent.putExtra("data_key", "some_value")

// Yayını gönderiyoruz
sendBroadcast(intent)

Bu mesajı almak için bir BroadcastReceiver kaydetmek gerekir.

Kayıt, statik (Manifest'te) veya dinamik (kod içinde registerReceiver kullanarak) olabilir.

Dinamik kayıt örneği:

// Yayın için bir Filter oluşturuyoruz
val filter = IntentFilter("com.example.MY_CUSTOM_ACTION")

// Bir BroadcastReceiver oluşturuyoruz
val receiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        // Alınan mesajı işliyoruz
        val receivedData = intent?.getStringExtra("data_key")
        Log.d("BroadcastReceiver", "Özel yayın alındı, veriler: $receivedData")
    }
}

// BroadcastReceiver'ı kaydediyoruz
registerReceiver(receiver, filter)

// Bileşen yok edildiğinde kaydı iptal etmeyi unutmayın
// unregisterReceiver(receiver)

Aşağıdaki noktaları dikkate almak önemlidir:

  • Açık broadcast mesajları: Android 8.0 (API seviyesi 26) ve üzeri, kaynak tüketimini optimize etmek için dolaylı broadcast mesajlarına kısıtlamalar getirdi. Bu mesajları yeni Android sürümlerinde göndermek için genellikle alıcının paketini belirtmek gerekir (açık broadcast).
    val intent = Intent("com.example.MY_CUSTOM_ACTION")
    // Alıcının paketini belirtin (biliniyorsa)
    intent.setPackage("com.example.receiverapp")
    sendBroadcast(intent)
    
  • İzinler: Belirli koruma seviyelerine sahip broadcast'leri göndermek ve almak için uygun izinler gerekebilir (örneğin, android.permission.SEND_SMS).
  • Yerel broadcast'ler: Sadece aynı uygulama içinde mesaj iletmek için LocalBroadcastManager kullanılması önerilir (artık kullanımdan kaldırılmıştır, yerine Flow veya RxJava gibi diğer yaklaşımlar önerilir), bu daha verimli ve güvenlidir.
    // Yerel broadcast gönder
    val localIntent = Intent("com.example.MY_LOCAL_ACTION")
    LocalBroadcastManager.getInstance(this).sendBroadcast(localIntent)
    
    // Yerel BroadcastReceiver kaydı
    val localReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            // İşleme
        }
    }
    LocalBroadcastManager.getInstance(this).registerReceiver(localReceiver, IntentFilter("com.example.MY_LOCAL_ACTION"))
    
    // Kaydı iptal et
    // LocalBroadcastManager.getInstance(this).unregisterReceiver(localReceiver)