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
LocalBroadcastManagerkullanı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)