Μίλησε για δέκτες και παρόχους περιεχομένου στο Android.
sobes.tech AI
Απάντηση από AI
Οι δέκτες (Broadcast Receivers) αντιδρούν σε γενικά συστημικά μηνύματα broadcast, όπως ειδοποιήσεις χαμηλής μπαταρίας, σύνδεση δικτύου ή λήψη φωτογραφίας. Δεν έχουν οπτική διεπαφή και εκτελούν εργασίες στο παρασκήνιο.
Υπάρχουν δύο βασικοί τύποι:
- Καταχωρημένοι στατικά: Αναφέρονται στο
AndroidManifest.xml. Το σύστημα ξεκινά την εφαρμογή όταν λαμβάνει το αντίστοιχο intent, ακόμα και αν δεν τρέχει. - Καταχωρημένοι δυναμικά: Εγγράφονται στον κώδικα με
Context.registerReceiver(). Λειτουργούν μόνο όσο υπάρχει το συστατικό (π.χ. δραστηριότητα).
Κάθε δέκτης υλοποιεί τη μέθοδο onReceive(Context context, Intent intent), όπου επεξεργάζεται το εισερχόμενο intent.
Οι πάροχοι περιεχομένου (Content Providers) διαχειρίζονται την κοινή πρόσβαση σε δομημένα δεδομένα. Παρέχουν ένα τυποποιημένο interface CRUD (Create, Read, Update, Delete) για αλληλεπίδραση με δεδομένα που αποθηκεύονται σε διάφορες πηγές (SQLite βάσεις δεδομένων, αρχεία, δεδομένα δικτύου κ.ά.).
Βασικές μέθοδοι των παρόχων περιεχομένου:
onCreate(): Αρχικοποίηση του παρόχου.query(): Ανάκτηση δεδομένων.insert(): Προσθήκη νέων δεδομένων.update(): Ενημέρωση υπαρχόντων δεδομένων.delete(): Διαγραφή δεδομένων.getType(): Επιστρέφει τον τύπο MIME των δεδομένων για αυτό το URI.
Η πρόσβαση στον πάροχο περιεχομένου γίνεται μέσω του ContentResolver. Το URI (Unified Resource Identifier) χρησιμοποιείται για την αναγνώριση συγκεκριμένου συνόλου δεδομένων.
Παράδειγμα χρήσης του ContentResolver για ερώτημα δεδομένων:
// Uri για τον πίνακα επαφών
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
// Ερώτημα δεδομένων
Cursor cursor = getContentResolver().query(
contactsUri,
projection,
null, // επιλογή
null, // επιλογήArgs
null // σειρά ταξινόμησης
);
if (cursor != null) {
while (cursor.moveToNext()) {
long contactId = cursor.getLong(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
String displayName = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
// Επεξεργασία δεδομένων
}
cursor.close();
}
Παράδειγμα καταχώρησης στατικού δέκτη στο AndroidManifest.xml:
<receiver
android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BATTERY_LOW" />
</intent-filter>
</receiver>
Παράδειγμα υλοποίησης δέκτη:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() != null && intent.getAction().equals(Intent.ACTION_BATTERY_LOW)) {
// Εκτέλεση ενεργειών σε περίπτωση χαμηλής μπαταρίας
}
}
}
Βασικές διαφορές:
| Χαρακτηριστικό | Broadcast Receivers | Content Providers |
|---|---|---|
| Σκοπός | Αντίδραση σε broadcast γεγονότα | Διαχείριση πρόσβασης σε δεδομένα |
| Διεπαφή | onReceive() |
CRUD μέθοδοι μέσω ContentResolver |
| Οπτική απεικόνιση | Δεν υπάρχει | Δεν υπάρχει |
| Πρόσβαση | Λαμβάνουν intents από το σύστημα | Παρέχουν δεδομένα κατόπιν ερωτήματος |