Sobes.tech
Junior

Androidda xabarlarni olish uchun BroadcastReceiver qanday ulash mumkin?

sobes.tech AI

AIdan javob

Asosiy ikki usul mavjud:

  1. 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)
    }
    
  2. 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
                }
            }
        }
    }