Sobes.tech
Middle

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