Sobes.tech
Middle

Čo je Content Provider a ako sa používa v Android?

sobes.tech AI

Odpoveď od AI

Poskytovateľ obsahu (Content Provider) je jednou zo základných stavebných blokov Androidu (komponenta Application Component), ktorá poskytuje štandardizované rozhranie pre prístup a správu štruktúrovaných údajov. Funguje ako sprostredkovateľ medzi aplikáciou a zdrojom údajov (napríklad SQLite databáza, súbory, sieťové údaje).

Používa sa na:

  • Zdieľaný prístup k údajom: Umožňuje rôznym aplikáciám bezpečne získať prístup k rovnakým údajom, bez priameho prístupu k základnému zdroju údajov.
  • Správa oprávnení: Umožňuje kontrolovať, ktoré aplikácie majú prístup k údajom a aké operácie (čítanie, zápis, aktualizácia, vymazanie) môžu vykonávať.
  • Abstrakcia zdroja údajov: Skrýva detaily implementácie zdroja údajov od klientov, zjednodušuje prístup k údajom.
  • Integrácia s Android Frameworkom: Používajú sa komponenty ako CursorLoader na asynchrónne načítanie údajov do UI a SyncAdapter na synchronizáciu údajov.

Hlavné metódy Content Provider:

// Vykonáva dopyt na poskytovateľa a vracia Cursor
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder);

// Vloží nový záznam do poskytovateľa a vracia URI nového záznamu
public Uri insert(Uri uri, ContentValues values);

// Aktualizuje existujúce záznamy v poskytovateľovi a vracia počet aktualizovaných riadkov
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs);

// Vymazáva záznamy z poskytovateľa a vracia počet vymazaných riadkov
public int delete(Uri uri, String selection, String[] selectionArgs);

// Vráti MIME typ údajov pre dané URI
public String getType(Uri uri);

// Inicializuje poskytovateľa pri jeho vytvorení
public boolean onCreate();

URI na prístup k Content Provider má nasledovný formát:

content://authority/path segment/id

kde:

  • content:// — štandardná schéma pre Content Providers.
  • authority — jedinečný reťazec, ktorý identifikuje Content Provider (zvyčajne názov balíka aplikácie alebo jeho časť).
  • path segment — voliteľná časť, ktorá odkazuje na konkrétnu tabuľku alebo súbor údajov.
  • id — voliteľná časť, ktorá odkazuje na konkrétny záznam v súbore údajov.

Príklad použitia ContentResolver na interakciu s Content Provider:

// Získanie inštancie ContentResolver
ContentResolver resolver = getContentResolver();

// URI na prístup k údajom (napríklad systémový poskytovateľ kontaktov)
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;

// Vykonanie dopytu
Cursor cursor = resolver.query(contactsUri, null, null, null, null);

// Spracovanie výsledku (prechádzanie kurzora)
if (cursor != null && cursor.moveToFirst()) {
    // ... čítanie údajov z kurzora ...
    cursor.close(); // Vždy zatvárajte kurzor!
}

Registrácia Content Provider v 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" />