Junior
Өз эфир билдирүүңүздү жибере аласызбы?
sobes.tech AI
AIден жооп
Ооба, мүмкүн.
sendBroadcast() ыкмасын колдонуу керек.
// Биздин broadcast үчүн Intent түзөбүз
val intent = Intent("com.example.MY_CUSTOM_ACTION")
// Артык маалыматтарды Intentке кошуу (міндеттүү эмес)
intent.putExtra("data_key", "some_value")
// Broadcast жөнөтүү
sendBroadcast(intent)
Бул билдирүүнү кабыл алуу үчүн BroadcastReceiver катталышы керек.
Каттоо статикалык (Manifestте) же динамикалык (коддо registerReceiver аркылуу) болушу мүмкүн.
Динамикалык каттоо мисалы:
// Биздин 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)