Sobes.tech
Junior

Kako povezati BroadcastReceiver za primanje poruka u Androidu?

sobes.tech АИ

Одговор од АИ

Postoje dva glavna načina:

  1. Dinamička registracija:

    • Registruje se i odjavljuje programatski u kodu.
    • Živi dok je aktivan objekat koji ga je registrovao.
    • Koristi se za događaje koje nije potrebno primati stalno ili kada aplikacija nije aktivna (na primer, pri promeni orijentacije, nivou napunjenosti baterije).
    // U Activity ili Fragmentu
    private val receiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            // Obrada primljene poruke
            intent?.action?.let { action ->
                when (action) {
                    Intent.ACTION_BATTERY_CHANGED -> {
                        // Obrada promene baterije
                    }
                    // Druge akcije
                }
            }
        }
    }
    
    override fun onResume() {
        super.onResume()
        val intentFilter = IntentFilter().apply {
            addAction(Intent.ACTION_BATTERY_CHANGED)
            // Druge akcije
        }
        registerReceiver(receiver, intentFilter)
    }
    
    override fun onPause() {
        super.onPause()
        unregisterReceiver(receiver)
    }
    
  2. Statička registracija:

    • Objava u manifest fajlu (AndroidManifest.xml).
    • Živi duže od životnog ciklusa komponente koja ga je registrovala. Može primati poruke čak i kada aplikacija nije aktivna (za neke akcije, sa ograničenjima u poslednjim verzijama Androida).
    • Koristi se za sistemske događaje koje je potrebno primati stalno (na primer, pri pokretanju uređaja).
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="com.example.yourapp">
    
        <application ...>
            <receiver android:name=".MyBroadcastReceiver"
                      android:exported="true"> <!-- Važno za Android 12+ -->
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                    <action android:name="android.intent.action.AIRPLANE_MODE" />
                    <!-- Druge akcije -->
                </intent-filter>
            </receiver>
            ...
        </application>
    </manifest>
    
    // Klasa BroadcastReceiver
    class MyBroadcastReceiver : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            // Obrada primljene poruke
            intent?.action?.let { action ->
                when (action) {
                    Intent.ACTION_BOOT_COMPLETED -> {
                        // Obrada završetka učitavanja
                    }
                    Intent.ACTION_AIRPLANE_MODE_CHANGED -> {
                        // Obrada promene režima leta
                    }
                    // Druge akcije
                }
            }
        }
    }