Sobes.tech
Junior

Android-də mesajlar almaq üçün BroadcastReceiver necə qoşulur?

sobes.tech Süni İntellekt

AI-dan cavab

İki əsas üsul mövcuddur:

  1. Dinamik qeydiyyat:

    • Kodda proqramlaşdırma yolu ilə qeydiyyata alınır və ləğv edilir.
    • Qeydiyyatdan keçmiş obyekt aktiv olduğu müddətcə davam edir.
    • Bu, davamlı qəbul edilməli olmayan və ya tətbiq aktiv olmadıqda (məsələn, istiqamətin dəyişdirilməsi, batareya səviyyəsi) istifadə olunan hadisələr üçün istifadə olunur.
    // Activity və ya Fragment-də
    private val receiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            // Alınan mesajın emalı
            intent?.action?.let { action ->
                when (action) {
                    Intent.ACTION_BATTERY_CHANGED -> {
                        // Batareya dəyişikliklərinin emalı
                    }
                    // Digər hərəkətlər
                }
            }
        }
    }
    
    override fun onResume() {
        super.onResume()
        val intentFilter = IntentFilter().apply {
            addAction(Intent.ACTION_BATTERY_CHANGED)
            // Digər hərəkətlər
        }
        registerReceiver(receiver, intentFilter)
    }
    
    override fun onPause() {
        super.onPause()
        unregisterReceiver(receiver)
    }
    
  2. Statik qeydiyyat:

    • AndroidManifest.xml faylında elan edilir.
    • Qeydiyyatdan keçmiş komponentin həyat dövründən daha uzun müddət davam edir. Bu, tətbiq aktiv olmasa belə mesajları qəbul edə bilər (bəzən Android-un son versiyalarında məhdudiyyətlərlə).
    • Sistem hadisələri üçün istifadə olunur, davamlı qəbul edilməlidir (məsələn, cihazın açılması zamanı).
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="com.example.yourapp">
    
        <application ...>
            <receiver android:name=".MyBroadcastReceiver"
                      android:exported="true"> <!-- Android 12+ üçün vacib -->
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                    <action android:name="android.intent.action.AIRPLANE_MODE" />
                    <!-- Digər hərəkətlər -->
                </intent-filter>
            </receiver>
            ...
        </application>
    </manifest>
    
    // BroadcastReceiver sinfi
    class MyBroadcastReceiver : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            // Alınan mesajın emalı
            intent?.action?.let { action ->
                when (action) {
                    Intent.ACTION_BOOT_COMPLETED -> {
                        // Başlanğıc tamamlandıqda emal
                    }
                    Intent.ACTION_AIRPLANE_MODE_CHANGED -> {
                        // Uçuş rejimi dəyişikliklərinin emalı
                    }
                    // Digər hərəkətlər
                }
            }
        }
    }