Junior
Android-də mesajlar almaq üçün BroadcastReceiver necə qoşulur?
sobes.tech Süni İntellekt
AI-dan cavab
İki əsas üsul mövcuddur:
-
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) } -
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 } } } }