Erzählen Sie von Empfängern und Content-Providern in Android.
sobes.tech KI
Antwort von AI
Empfänger (Broadcast Receivers) reagieren auf systemweite Broadcast-Nachrichten, wie z.B. Benachrichtigungen über niedrigen Batteriestand, Netzwerkverbindung oder Fotos aufnehmen. Sie haben keine visuelle Oberfläche und führen Hintergrundaufgaben aus.
Es gibt zwei Haupttypen:
- Statisch registriert: Deklariert in
AndroidManifest.xml. Das System startet die Anwendung bei Empfang des entsprechenden Intents, auch wenn sie nicht läuft. - Dynamisch registriert: Registriert im Code mit
Context.registerReceiver(). Funktioniert nur, solange die Komponente (z.B. eine Aktivität) existiert.
Jeder Empfänger implementiert die Methode onReceive(Context context, Intent intent), in der der eingehende Intent verarbeitet wird.
Content-Provider verwalten den gemeinsamen Zugriff auf strukturierte Daten. Sie bieten eine standardisierte CRUD-Schnittstelle (Create, Read, Update, Delete) für die Interaktion mit Daten, die in verschiedenen Quellen gespeichert sind (SQLite-Datenbanken, Dateien, Netzwerdaten usw.).
Hauptmethoden des Content-Providers:
onCreate(): Initialisiert den Provider.query(): Holt Daten aus der Quelle.insert(): Fügt neue Daten hinzu.update(): Aktualisiert bestehende Daten.delete(): Löscht Daten.getType(): Gibt den MIME-Typ der Daten für eine URI zurück.
Der Zugriff auf den Content-Provider erfolgt über ContentResolver. URI (Uniform Resource Identifier) wird verwendet, um einen bestimmten Datensatz zu identifizieren.
Beispiel für die Verwendung von ContentResolver zur Datenabfrage:
// Uri für die Kontakttabelle
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
// Datenabfrage
Cursor cursor = getContentResolver().query(
contactsUri,
projection,
null, // Auswahl
null, // Auswahl-Argumente
null // Sortierreihenfolge
);
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));
// Datenverarbeitung
}
cursor.close();
}
Beispiel für die statische Registrierung eines Broadcast-Empfängers in 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>
Beispiel für die Implementierung des Empfängers:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() != null && intent.getAction().equals(Intent.ACTION_BATTERY_LOW)) {
// Aktionen bei niedrigem Batteriestand
}
}
}
Wichtige Unterschiede:
| Eigenschaft | Broadcast Receiver | Content Provider |
|---|---|---|
| Zweck | Reaktion auf Broadcast-Nachrichten | Verwaltung des Datenzugriffs |
| Schnittstelle | onReceive() |
CRUD-Methoden via ContentResolver |
| Visuelle Darstellung | Nicht vorhanden | Nicht vorhanden |
| Zugriff | Empfangen Intents vom System | Daten auf Anfrage bereitstellen |