Sobes.tech
Middle

Ce este un Content Provider și cum este utilizat în Android?

sobes.tech AI

Răspuns de la AI

Content Provider — este unul dintre blocurile de construcție ale Android (Componenta Application), care oferă o interfață standardizată pentru accesul și gestionarea datelor structurate. Acționează ca un intermediar între aplicație și sursa de date (de exemplu, o bază de date SQLite, fișiere, date de rețea).

Este utilizat pentru:

  • Acces partajat la date: Permite diferitelor aplicații să acceseze în mod sigur aceleași date fără a avea acces direct la sursa de date subiacente.
  • Gestionarea permisiunilor: Permite controlul asupra aplicațiilor care au acces la date și asupra operațiunilor (citire, scriere, actualizare, ștergere) pe care le pot efectua.
  • Abstracție a sursei de date: Ascunde detaliile de implementare ale sursei de date de către clienți, simplificând accesul la date.
  • Integrare cu Framework-ul Android: Este utilizat de componente precum CursorLoader pentru încărcarea asincronă a datelor în UI și SyncAdapter pentru sincronizarea datelor.

Metodele principale ale Content Provider:

// Execută o interogare către provider și returnează un Cursor
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder);

// Inserează o înregistrare nouă în provider și returnează URI-ul noii înregistrări
public Uri insert(Uri uri, ContentValues values);

// Actualizează înregistrările existente în provider și returnează numărul de rânduri actualizate
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs);

// Șterge înregistrări din provider și returnează numărul de rânduri șterse
public int delete(Uri uri, String selection, String[] selectionArgs);

// Returnează tipul MIME al datelor pentru un URI dat
public String getType(Uri uri);

// Inițializează provider-ul la crearea sa
public boolean onCreate();

URI-ul pentru accesul la Content Provider are următorul format:

content://authority/path segment/id

unde:

  • content:// — schema standard pentru Content Providers.
  • authority — șir unic care identifică Content Provider-ul (de obicei, numele pachetului aplicației sau o parte a acestuia).
  • path segment — parte opțională, indicând un tabel sau un set de date specific.
  • id — parte opțională, indicând o înregistrare specifică din setul de date.

Exemplu de utilizare a ContentResolver pentru interacțiunea cu un Content Provider:

// Obține o instanță de ContentResolver
ContentResolver resolver = getContentResolver();

// URI pentru accesarea datelor (de exemplu, provider-ul de contacte al sistemului)
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;

// Execută interogarea
Cursor cursor = resolver.query(contactsUri, null, null, null, null);

// Procesează rezultatul (parcurge cursor-ul)
if (cursor != null && cursor.moveToFirst()) {
    // ... citirea datelor din cursor ...
    cursor.close(); // Închide întotdeauna cursor-ul!
}

Content Provider-ul este înregistrat în fișierul AndroidManifest.xml:

<provider
    android:name=".MyContentProvider"
    android:authorities="com.example.myapp.provider"
    android:exported="true"
    android:readPermission="com.example.myapp.permission.READ_DATA"
    android:writePermission="com.example.myapp.permission.WRITE_DATA" />