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 -> { // Επεξεργασία αλλαγής λειτουργίας πτήσης } // Άλλες ενέργειες } } } } - Δηλώνεται στο αρχείο μανιφέστ (