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 |