Sobes.tech
Junior

Ինչպես միացնել BroadcastReceiver- ը հաղորդագրություններ ստանալու համար Android-ում?

sobes.tech AI

Պատասխան AI-ից

Կան երկու հիմնական մեթոդներ.

  1. Դինամիկ գրանցում:

    • Գրանցվում և հեռացվում է ծրագրային կերպով կոդում:
    • Կյանքը շարունակվում է այնքան ժամանակ, քանի դեռ ակտիվ է այն օբյեկտը, որը գրանցել է:
    • Օգտագործվում է այն իրադարձությունների համար, որոնք անհրաժեշտ չէ մշտապես ստանալ կամ երբ հավելվածը չի ակտիվ (օրինակ, ուղղության փոփոխության ժամանակ, մարտկոցի լիցքավորման մակարդակի փոփոխության դեպքում):
    // Activity կամ Fragment-ում
    private val receiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            // Ստացված հաղորդագրության մշակումը
            intent?.action?.let { action ->
                when (action) {
                    Intent.ACTION_BATTERY_CHANGED -> {
                        // Մարտկոցի փոփոխության մշակումը
                    }
                    // Այլ գործողություններ
                }
            }
        }
    }
    
    override fun onResume() {
        super.onResume()
        val intentFilter = IntentFilter().apply {
            addAction(Intent.ACTION_BATTERY_CHANGED)
            // Այլ գործողություններ
        }
        registerReceiver(receiver, intentFilter)
    }
    
    override fun onPause() {
        super.onPause()
        unregisterReceiver(receiver)
    }
    
  2. Կայուն գրանցում:

    • Հայտարարում է մանիֆեստի ֆայլում (AndroidManifest.xml):
    • Կյանքից երկար է, քան այն կոմպոնենտի, որը գրանցել է: Մինչև հավելվածը ակտիվ չէ, կարող է ստանալ հաղորդագրություններ (մեկ որոշ գործողությունների համար, որոնք սահմանափակված են վերջին Android տարբերակներում):
    • Օգտագործվում է համակարգային իրադարձությունների համար, որոնք անհրաժեշտ է մշտապես ստանալ (օրինակ, սարքի բեռնման ժամանակ):
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="com.example.yourapp">
    
        <application ...>
            <receiver android:name=".MyBroadcastReceiver"
                      android:exported="true"> <!-- Կարևոր Android 12+ համար -->
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                    <action android:name="android.intent.action.AIRPLANE_MODE" />
                    <!-- Այլ գործողություններ -->
                </intent-filter>
            </receiver>
            ...
        </application>
    </manifest>
    
    // BroadcastReceiver-ի դասը
    class MyBroadcastReceiver : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            // Ստացված հաղորդագրության մշակումը
            intent?.action?.let { action ->
                when (action) {
                    Intent.ACTION_BOOT_COMPLETED -> {
                        // Բեռնման ավարտի մշակումը
                    }
                    Intent.ACTION_AIRPLANE_MODE_CHANGED -> {
                        // Ուղղաթիռի ռեժիմի փոփոխության մշակումը
                    }
                    // Այլ գործողություններ
                }
            }
        }
    }