Sobes.tech
Junior

Τι είναι το BroadcastReceiver στο Android;

sobes.tech AI

Απάντηση από AI

Αυτό είναι ένα συστατικό που ανταποκρίνεται σε μηνύματα broadcast συστήματος ή χρήστη. Δεν διαθέτει διεπαφή χρήστη και προορίζεται για την εκτέλεση εργασιών στο παρασκήνιο σε απάντηση σε συγκεκριμένα γεγονότα.

Βασικά χαρακτηριστικά:

  • Ανταποκρίνεται σε Intent με συγκεκριμένη ενέργεια (action).
  • Σύντομο συστατικό, η μέθοδος onReceive() εκτελείται σε σύντομο χρονικό διάστημα.
  • Δεν προορίζεται για μακροχρόνιες λειτουργίες. Αν απαιτείται μακρά εργασία, πρέπει να ξεκινάει μια Service από το onReceive().
  • Μπορεί να καταχωρηθεί στατικά στο manifest ή δυναμικά στον κώδικα.

Παραδείγματα χρήσης:

  • Ανταπόκριση σε αλλαγές κατάστασης δικτύου (android.net.conn.CONNECTIVITY_CHANGE).
  • Ανταπόκριση σε εκκίνηση συστήματος (android.intent.action.BOOT_COMPLETED).
  • Επεξεργασία εισερχόμενων SMS.
  • Λήψη προσαρμοσμένων μηνυμάτων που αποστέλλονται από άλλα συστατικά ή άλλες εφαρμογές.

Εγγραφή στο manifest:

<receiver android:name=".MyBroadcastReceiver"
          android:exported="true"> // exported="true" ώστε άλλες εφαρμογές να μπορούν να στέλνουν intents
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

Εγγραφή στον κώδικα:

// Σε μια δραστηριότητα ή υπηρεσία
IntentFilter filter = new IntentFilter("com.example.MY_CUSTOM_ACTION");
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
registerReceiver(receiver, filter);

// Στο onDestroy() ή onStop() - είναι σημαντικό να ακυρώσετε την εγγραφή!
unregisterReceiver(receiver);

Κλάση BroadcastReceiver:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Εδώ εκτελείται ο κώδικας κατά τη λήψη του Intent
        // Για παράδειγμα:
        if ("com.example.MY_CUSTOM_ACTION".equals(intent.getAction())) {
            Toast.makeText(context, "Προσαρμοσμένη ενέργεια λήφθηκε!", Toast.LENGTH_SHORT).show();
        }
    }
}