Junior
Jak připojit BroadcastReceiver pro příjem zpráv v Androidu?
sobes.tech AI
Odpověď od AI
Existují dva hlavní způsoby:
-
Dynamická registrace:
- Registruje se a odhlašuje programově v kódu.
- Žije, dokud je aktivní objekt, který ji zaregistroval.
- Používá se pro události, které není třeba přijímat neustále, nebo když aplikace není aktivní (například při změně orientace, úrovně nabití baterie).
// V Activity nebo Fragmentu private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Zpracování obdržené zprávy intent?.action?.let { action -> when (action) { Intent.ACTION_BATTERY_CHANGED -> { // Zpracování změny baterie } // Další akce } } } } override fun onResume() { super.onResume() val intentFilter = IntentFilter().apply { addAction(Intent.ACTION_BATTERY_CHANGED) // Další akce } registerReceiver(receiver, intentFilter) } override fun onPause() { super.onPause() unregisterReceiver(receiver) } -
Statická registrace:
- Je deklarována v manifest souboru (
AndroidManifest.xml). - Žije déle než životní cyklus komponenty, která ji zaregistrovala. Může přijímat zprávy i když aplikace není aktivní (pro některé akce, s omezeními v posledních verzích Androidu).
- Používá se pro systémové události, které je třeba přijímat neustále (například při spuštění zařízení).
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapp"> <application ...> <receiver android:name=".MyBroadcastReceiver" android:exported="true"> <!-- Důležité pro Android 12+ --> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.AIRPLANE_MODE" /> <!-- Další akce --> </intent-filter> </receiver> ... </application> </manifest>// Třída BroadcastReceiver class MyBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Zpracování obdržené zprávy intent?.action?.let { action -> when (action) { Intent.ACTION_BOOT_COMPLETED -> { // Zpracování ukončení načítání } Intent.ACTION_AIRPLANE_MODE_CHANGED -> { // Zpracování změny režimu letadla } // Další akce } } } } - Je deklarována v manifest souboru (