Junior
Kako povezati BroadcastReceiver za primanje poruka u Androidu?
sobes.tech АИ
Одговор од АИ
Postoje dva glavna načina:
-
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) } -
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 } } } } - Objava u manifest fajlu (