Junior
Androidda xabarlarni olish uchun BroadcastReceiver qanday ulash mumkin?
sobes.tech AI
AIdan javob
Asosiy ikki usul mavjud:
-
Dinamik ro'yxatdan o'tkazish:
- Kodda dasturlashtirilgan holda ro'yxatdan o'tkaziladi va bekor qilinadi.
- Uni ro'yxatdan o'tkazgan ob'ekt faol bo'lsa, davom etadi.
- Bu voqealar uchun ishlatiladi, ular doimiy ravishda qabul qilish kerak emas yoki ilova faol bo'lmagan hollarda (masalan, orientatsiya o'zgarishi, batareya darajasi).
// Activity yoki Fragmentda private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Olingan xabarni qayta ishlash intent?.action?.let { action -> when (action) { Intent.ACTION_BATTERY_CHANGED -> { // Batareya o'zgarishini qayta ishlash } // Boshqa harakatlar } } } } override fun onResume() { super.onResume() val intentFilter = IntentFilter().apply { addAction(Intent.ACTION_BATTERY_CHANGED) // Boshqa harakatlar } registerReceiver(receiver, intentFilter) } override fun onPause() { super.onPause() unregisterReceiver(receiver) } -
Statik ro'yxatdan o'tkazish:
- AndroidManifest.xml faylida e'lon qilinadi.
- U ro'yxatdan o'tkazgan komponentning hayot aylanishidan uzoqroq davom etadi. U hatto ilova faol bo'lmagan hollarda ham xabarlarni qabul qilishi mumkin (ba'zi harakatlar uchun, Androidning so'nggi versiyalarida cheklovlar bilan).
- Bu tizim voqealari uchun ishlatiladi, ular doimiy ravishda qabul qilinishi kerak (masalan, qurilma ishga tushirilganda).
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapp"> <application ...> <receiver android:name=".MyBroadcastReceiver" android:exported="true"> <!-- Android 12+ uchun muhim --> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.AIRPLANE_MODE" /> <!-- Boshqa harakatlar --> </intent-filter> </receiver> ... </application> </manifest>// BroadcastReceiver sinfi class MyBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Olingan xabarni qayta ishlash intent?.action?.let { action -> when (action) { Intent.ACTION_BOOT_COMPLETED -> { // Yuklash tugagach, qayta ishlash } Intent.ACTION_AIRPLANE_MODE_CHANGED -> { // Uçak modining o'zgarishini qayta ishlash } // Boshqa harakatlar } } } }