Junior
Kā pieslēgt BroadcastReceiver, lai saņemtu ziņojumus Android?
sobes.tech AI
Atbilde no AI
Ir divi galvenie veidi:
-
Dinamisks reģistrācija:
- Programmatiski reģistrējas un atceļas kodā.
- Dzīvo tik ilgi, kamēr aktīvs objekts, kurš to reģistrēja.
- Izmanto notikumiem, kurus nav nepieciešams pastāvīgi saņemt vai kad lietotne nav aktīva (piemēram, mainot orientāciju, akumulatora uzlādes līmeni).
// Activity vai Fragmentā private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Saņemtās ziņojuma apstrāde intent?.action?.let { action -> when (action) { Intent.ACTION_BATTERY_CHANGED -> { // Akumulatora izmaiņu apstrāde } // Citas darbības } } } } override fun onResume() { super.onResume() val intentFilter = IntentFilter().apply { addAction(Intent.ACTION_BATTERY_CHANGED) // Citas darbības } registerReceiver(receiver, intentFilter) } override fun onPause() { super.onPause() unregisterReceiver(receiver) } -
Statiska reģistrācija:
- Deklarēta manifestā (
AndroidManifest.xml). - Dzīvo ilgāk nekā komponenta dzīves cikls, kurš to reģistrēja. Var saņemt ziņojumus pat tad, ja lietotne nav aktīva (dažām darbībām ar ierobežojumiem jaunākajās Android versijās).
- Izmanto sistēmas notikumiem, kurus nepieciešams pastāvīgi saņemt (piemēram, ierīces ielādes laikā).
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapp"> <application ...> <receiver android:name=".MyBroadcastReceiver" android:exported="true"> <!-- Svarīgi Android 12+ --> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.AIRPLANE_MODE" /> <!-- Citas darbības --> </intent-filter> </receiver> ... </application> </manifest>// BroadcastReceiver klase class MyBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { // Saņemto ziņojumu apstrāde intent?.action?.let { action -> when (action) { Intent.ACTION_BOOT_COMPLETED -> { // Pabeigšanas apstrāde } Intent.ACTION_AIRPLANE_MODE_CHANGED -> { // Režīma maiņas apstrāde } // Citas darbības } } } } - Deklarēta manifestā (