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 -> { // რეისის რეჟიმის ცვლილების დამუშავება } // სხვა მოქმედებები } } } } - გამოაცხადა მანიфესტ ფაილში (