Parlez des récepteurs et des fournisseurs de contenu dans Android.
sobes.tech IA
Réponse de l'IA
Les récepteurs (Broadcast Receivers) réagissent aux messages de diffusion du système, tels que les notifications de batterie faible, la connexion réseau ou la prise de photos. Ils n'ont pas d'interface visuelle et effectuent des tâches en arrière-plan.
Il existe deux types principaux :
- Enregistrés statiquement : Déclarés dans
AndroidManifest.xml. Le système lance l'application lors de la réception de l'intent correspondant, même si elle n'est pas en cours d'exécution. - Enregistrés dynamiquement : Enregistrés dans le code via
Context.registerReceiver(). Fonctionnent uniquement tant que le composant (par exemple, une activité) existe.
Chaque récepteur implémente la méthode onReceive(Context context, Intent intent), où le traitement de l'intent entrant a lieu.
Les fournisseurs de contenu (Content Providers) gèrent l'accès partagé aux données structurées. Ils offrent une interface standardisée CRUD (Créer, Lire, Mettre à jour, Supprimer) pour interagir avec des données stockées dans diverses sources (bases de données SQLite, fichiers, données réseau, etc.).
Méthodes principales du fournisseur de contenu :
onCreate(): Initialise le fournisseur.query(): Récupère des données de la source.insert(): Ajoute de nouvelles données.update(): Met à jour des données existantes.delete(): Supprime des données.getType(): Renvoie le type MIME des données pour un URI donné.
L'accès au fournisseur de contenu se fait via ContentResolver. URI (Identifiant de Ressource Unifié) est utilisé pour identifier un ensemble spécifique de données.
Exemple d'utilisation de ContentResolver pour interroger des données :
// Uri pour la table des contacts
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
// Requête de données
Cursor cursor = getContentResolver().query(
contactsUri,
projection,
null, // sélection
null, // arguments de sélection
null // ordre de tri
);
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));
// Traitement des données
}
cursor.close();
}
Exemple d'enregistrement d'un récepteur statique dans 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>
Exemple d'implémentation du récepteur :
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() != null && intent.getAction().equals(Intent.ACTION_BATTERY_LOW)) {
// Actions à effectuer en cas de batterie faible
}
}
}
Différences clés :
| Caractéristique | Récepteurs (Broadcast Receivers) | Fournisseurs de contenu (Content Providers) |
|---|---|---|
| But | Réagir aux événements de diffusion | Gérer l'accès aux données |
| Interface | onReceive() |
Méthodes CRUD via ContentResolver |
| Affichage visuel | Aucun | Aucun |
| Accès | Reçoivent des intents du système | Fournissent des données sur demande |