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