Vorbește despre receptori și furnizorii de conținut în Android.
sobes.tech AI
Răspuns de la AI
Receptorii (Broadcast Receivers) reacționează la mesajele de difuzare ale sistemului, cum ar fi notificările despre nivelul scăzut al bateriei, conectarea la rețea sau realizarea de fotografii. Nu au o interfață vizuală și îndeplinesc sarcini în fundal.
Există două tipuri principale:
- Înregistrate static: Declarate în
AndroidManifest.xml. Sistemul pornește aplicația la primirea intentului corespunzător, chiar dacă nu este pornită. - Înregistrate dinamic: Înregistrate în cod folosind
Context.registerReceiver(). Funcționează doar atât timp cât componenta (de exemplu, o activitate) există.
Fiecare receptor implementează metoda onReceive(Context context, Intent intent), unde se procesează intentul primit.
Content Providers gestionează accesul comun la date structurate. Oferă o interfață CRUD (Create, Read, Update, Delete) standardizată pentru interacțiunea cu datele stocate în diverse surse (baze de date SQLite, fișiere, date de rețea etc.).
Metodele principale ale Content Provider:
onCreate(): Inițializează provider-ul.query(): Obține date din sursă.insert(): Adaugă date noi.update(): Actualizează datele existente.delete(): Șterge date.getType(): Returnează tipul MIME al datelor pentru un URI dat.
Accesul la Content Provider se face prin ContentResolver. URI (Identificator de Resursă Unificat) este folosit pentru a identifica un set specific de date.
Exemplu de utilizare a ContentResolver pentru interogarea datelor:
// Uri pentru tabelul de contacte
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
// Interogare date
Cursor cursor = getContentResolver().query(
contactsUri,
projection,
null, // selecție
null, // argumente selecție
null // ordonare
);
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));
// Procesare date
}
cursor.close();
}
Exemplu de înregistrare a unui receptor static în 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>
Exemplu de implementare a receptorului:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() != null && intent.getAction().equals(Intent.ACTION_BATTERY_LOW)) {
// Acțiuni în caz de baterie slabă
}
}
}
Diferențe cheie:
| Caracteristică | Broadcast Receivers | Content Providers |
|---|---|---|
| Scop | Reacție la evenimente de difuzare | Gestionarea accesului la date |
| Interfață | onReceive() |
Metode CRUD prin ContentResolver |
| Vizualizare | Absentă | Absentă |
| Acces | Primesc intents de la sistem | Oferă date la cerere |