Junior
Ինչպես միացնել BroadcastReceiver- ը հաղորդագրություններ ստանալու համար Android-ում?
sobes.tech AI
Պատասխան AI-ից
Կան երկու հիմնական մեթոդներ.
-
Դինամիկ գրանցում:
- Գրանցվում և հեռացվում է ծրագրային կերպով կոդում:
- Կյանքը շարունակվում է այնքան ժամանակ, քանի դեռ ակտիվ է այն օբյեկտը, որը գրանցել է:
- Օգտագործվում է այն իրադարձությունների համար, որոնք անհրաժեշտ չէ մշտապես ստանալ կամ երբ հավելվածը չի ակտիվ (օրինակ, ուղղության փոփոխության ժամանակ, մարտկոցի լիցքավորման մակարդակի փոփոխության դեպքում):
// 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) } -
Կայուն գրանցում:
- Հայտարարում է մանիֆեստի ֆայլում (
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 -> { // Ուղղաթիռի ռեժիմի փոփոխության մշակումը } // Այլ գործողություններ } } } } - Հայտարարում է մանիֆեստի ֆայլում (