Sobes.tech
Junior

O'z broadcast-xabar yuborish mumkinmi?

sobes.tech AI

AIdan javob

Ha, mumkin.

sendBroadcast() metodidan foydalaniladi.

// Broadcast uchun Intent yaratamiz
val intent = Intent("com.example.MY_CUSTOM_ACTION")

// Qo'shimcha ma'lumotlarni Intentga qo'shish (ixtiyoriy)
intent.putExtra("data_key", "some_value")

// Broadcastni yuborish
sendBroadcast(intent)

Ushbu xabarni qabul qilish uchun BroadcastReceiverni ro'yxatdan o'tkazish kerak.

Ro'yxatdan o'tkazish statik (Manifestda) yoki dinamik (kodda registerReceiver yordamida) bo'lishi mumkin.

Dinamik ro'yxatdan o'tkazish misoli:

// Broadcast uchun Filter yaratamiz
val filter = IntentFilter("com.example.MY_CUSTOM_ACTION")

// BroadcastReceiver yaratamiz
val receiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        // Qabul qilingan xabarni ishlash
        val receivedData = intent?.getStringExtra("data_key")
        Log.d("BroadcastReceiver", "Maxsus broadcast qabul qilindi, ma'lumotlar: $receivedData")
    }
}

// BroadcastReceiverni ro'yxatdan o'tkazamiz
registerReceiver(receiver, filter)

// Komponent yo'q qilinayotganda ro'yxatdan chiqishni unutmang
// unregisterReceiver(receiver)

Quyidagi jihatlarni hisobga olish muhim:

  • Aniq broadcastlar: Android 8.0 (API daraja 26) va undan yuqori versiyalar, resurslarni tejash uchun noaniq broadcastlarga cheklovlar kiritdi. Bu versiyalarda bunday xabarlarni yuborish uchun odatda qabul qiluvchining paketini ko'rsatish kerak (aniq broadcast).
    val intent = Intent("com.example.MY_CUSTOM_ACTION")
    // Qabul qiluvchining paketini ko'rsatish (bilinsa)
    intent.setPackage("com.example.receiverapp")
    sendBroadcast(intent)
    
  • Ruxsatlar: Ba'zi himoyalangan broadcastlarni yuborish va qabul qilish uchun mos ruxsatlar talab qilinishi mumkin (masalan, android.permission.SEND_SMS).
  • Mahalliy broadcastlar: Bir ilova ichida xabar yuborish uchun LocalBroadcastManager (hozirda eskirgan, o'rniga Flow yoki RxJava kabi boshqa yondashuvlar tavsiya etiladi) ishlatish yaxshiroq va xavfsizroq.
    // Mahalliy broadcast yuborish
    val localIntent = Intent("com.example.MY_LOCAL_ACTION")
    LocalBroadcastManager.getInstance(this).sendBroadcast(localIntent)
    
    // Mahalliy BroadcastReceiverni ro'yxatdan o'tkazish
    val localReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            // Ishlash
        }
    }
    LocalBroadcastManager.getInstance(this).registerReceiver(localReceiver, IntentFilter("com.example.MY_LOCAL_ACTION"))
    
    // Ro'yxatdan chiqish
    // LocalBroadcastManager.getInstance(this).unregisterReceiver(localReceiver)