Sobes.tech
Middle

Vertel over ontvangers en content-providers in Android.

sobes.tech AI

Antwoord van AI

De broadcastontvangers (Broadcast Receivers) reageren op systeemwijde broadcastberichten, zoals meldingen over een lage batterij, netwerkverbinding of het maken van foto's. Ze hebben geen visuele interface en voeren taken op de achtergrond uit.

Er zijn twee hoofdtypen:

  • Statisch geregistreerd: Wordt gedeclareerd in AndroidManifest.xml. Het systeem start de app bij ontvangst van de juiste intent, zelfs als deze niet actief is.
  • Dynamisch geregistreerd: Wordt geregistreerd in de code met behulp van Context.registerReceiver(). Werkt alleen zolang de component (bijvoorbeeld een activiteit) bestaat.

Elke ontvanger implementeert de methode onReceive(Context context, Intent intent), waarin de binnenkomende intent wordt verwerkt.

Content Providers beheren de gedeelde toegang tot gestructureerde gegevens. Ze bieden een gestandaardiseerde CRUD-interface (Create, Read, Update, Delete) voor interactie met gegevens die in verschillende bronnen worden opgeslagen (SQLite-databases, bestanden, netwerkgegevens, enz.).

Belangrijkste methoden van de content provider:

  • onCreate(): Initialisatie van de provider.
  • query(): Ophalen van gegevens uit de bron.
  • insert(): Toevoegen van nieuwe gegevens.
  • update(): Bijwerken van bestaande gegevens.
  • delete(): Verwijderen van gegevens.
  • getType(): Geeft het MIME-type van de gegevens voor een gegeven URI terug.

Toegang tot de content provider wordt verkregen via ContentResolver. URI (Uniform Resource Identifier) wordt gebruikt om een specifieke gegevensset te identificeren.

Voorbeeld van het gebruik van ContentResolver om gegevens op te vragen:

// Uri voor de contacten-tabel
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;

String[] projection = {
    ContactsContract.Contacts._ID,
    ContactsContract.Contacts.DISPLAY_NAME
};

// Gegevens opvragen
Cursor cursor = getContentResolver().query(
    contactsUri,
    projection,
    null, // selectie
    null, // selectie-argumenten
    null  // sorteervolgorde
);

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));
        // Gegevens verwerken
    }
    cursor.close();
}

Voorbeeld van het registreren van een statische broadcast receiver 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>

Voorbeeld van de implementatie van de 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)) {
            // Acties bij lage batterij
        }
    }
}

Belangrijke verschillen:

Kenmerk Broadcast Receivers Content Providers
Doel Reageren op broadcastgebeurtenissen Beheer van gegevens toegang
Interface onReceive() CRUD-methoden via ContentResolver
Visueel Afwezig Afwezig
Toegang Ontvangen intents van het systeem Gegevens op aanvraag leveren