Sobes.tech
Middle

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