Sobes.tech
Junior

Оё имкон дорад паёми таратрии худро фиристед?

sobes.tech AI

Ҷавоб аз AI

Бале, мумкин аст.

Истифодаи методи sendBroadcast().

// Сохтани Intent барои broadcast-и мо
val intent = Intent("com.example.MY_CUSTOM_ACTION")

// Илова кардани маълумоти иловагӣ ба Intent (ихтиёрӣ)
intent.putExtra("data_key", "some_value")

// Иҷрои broadcast
sendBroadcast(intent)

Барои қабул кардани ин паём, бояд BroadcastReceiver-ро сабт кунед.

Регистратсия метавонад статикӣ (дар Manifest) ё динамикӣ (дар коди бо ёрии registerReceiver).

Масалан барои сабти динамикӣ:

// Сохтани Filter барои broadcast-и мо
val filter = IntentFilter("com.example.MY_CUSTOM_ACTION")

// Сохтани BroadcastReceiver
val receiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        // Коркарди паём
        val receivedData = intent?.getStringExtra("data_key")
        Log.d("BroadcastReceiver", "Broadcast-и махсус бо маълумот: $receivedData")
    }
}

// Сабт кардани BroadcastReceiver
registerReceiver(receiver, filter)

// Фаромӯш накунед, ки дар охир сабтро бекор кунед
// unregisterReceiver(receiver)

Мавзӯъҳои муҳим:

  • Паёмҳои broadcast равшан: Android 8.0 (API сатҳ 26) ва боло маҳдудиятҳо барои broadcast-ҳои ғайримушаххас ворид кард, барои оптимизатсияи истифодаи манбаъҳо. Барои ирсол кардани чунин паёмҳо дар версияҳои навтар, одатан бояд бастаки дастрасиро нишон диҳед.
    val intent = Intent("com.example.MY_CUSTOM_ACTION")
    // Нишон додани бастаки дастрасӣ (агар маълум бошад)
    intent.setPackage("com.example.receiverapp")
    sendBroadcast(intent)
    
  • Иртиботи иҷозатнома: Барои ирсол ва қабул кардани broadcast-ҳо бо сатҳи муҳофизат (масалан, android.permission.SEND_SMS) метавон иҷозатномаҳои дахлдорро талаб кард.
  • Broadcast-ҳои маҳаллӣ: Барои интиқоли паёмҳо дар дохили як барнома, тавсия мешавад, ки LocalBroadcastManager (ҳоло кӯҳна, беҳтар аст, ки истифодаи дигар усулҳоро, масалан Flow ё RxJava, истифода баред) истифода шавад, ки самаранок ва бехатар аст.
    // Иҷрои broadcast маҳаллӣ
    val localIntent = Intent("com.example.MY_LOCAL_ACTION")
    LocalBroadcastManager.getInstance(this).sendBroadcast(localIntent)
    
    // Сабт кардани BroadcastReceiver маҳаллӣ
    val localReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            // Коркарди паём
        }
    }
    LocalBroadcastManager.getInstance(this).registerReceiver(localReceiver, IntentFilter("com.example.MY_LOCAL_ACTION"))
    
    // Бекор кардани сабт
    // LocalBroadcastManager.getInstance(this).unregisterReceiver(localReceiver)