Sobes.tech
Middle

Co je Content Provider a jak se používá v Androidu?

sobes.tech AI

Odpověď od AI

Poskytovatel obsahu (Content Provider) je jedním ze stavebních bloků Androidu (komponenta Application Component), který poskytuje standardizované rozhraní pro přístup a správu strukturovaných dat. Funguje jako prostředník mezi aplikací a zdrojem dat (například SQLite databáze, soubory, síťová data).

Používá se pro:

  • Sdílený přístup k datům: Umožňuje různým aplikacím bezpečně získat přístup ke stejným datům, aniž by měly přímý přístup k podkladovému zdroji dat.
  • Správa oprávnění: Umožňuje kontrolovat, které aplikace mají přístup k datům a jaké operace (čtení, zápis, aktualizace, mazání) mohou provádět.
  • Abstrakce zdroje dat: Skrývá detaily implementace zdroje dat před klienty, zjednodušuje přístup k datům.
  • Integrace s Android Frameworkem: Používá se komponentami jako CursorLoader pro asynchronní načítání dat do UI a SyncAdapter pro synchronizaci dat.

Hlavní metody Content Provider:

// Provádí dotaz na poskytovatele a vrací Cursor
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder);

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

// Aktualizuje existující záznamy v poskytovateli a vrací počet aktualizovaných řádků
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs);

// Odstraňuje záznamy z poskytovatele a vrací počet odstraněných řádků
public int delete(Uri uri, String selection, String[] selectionArgs);

// Vrací MIME typ dat pro dané URI
public String getType(Uri uri);

// Inicializuje poskytovatele při jeho vytvoření
public boolean onCreate();

URI pro přístup k Content Provider má následující formát:

content://authority/path segment/id

kde:

  • content:// — standardní schéma pro Content Providers.
  • authority — unikátní řetězec identifikující Content Provider (obvykle název balíčku aplikace nebo jeho část).
  • path segment — nepovinná část odkazující na konkrétní tabulku nebo datovou sadu.
  • id — nepovinná část odkazující na konkrétní záznam v datové sadě.

Příklad použití ContentResolver pro interakci s Content Provider:

// Získání instance ContentResolver
ContentResolver resolver = getContentResolver();

// URI pro přístup k datům (například systémový poskytovatel kontaktů)
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;

// Provádění dotazu
Cursor cursor = resolver.query(contactsUri, null, null, null, null);

// Zpracování výsledku (procházení cursoru)
if (cursor != null && cursor.moveToFirst()) {
    // ... čtení dat z cursoru ...
    cursor.close(); // Vždy zavírejte cursor!
}

Registrace 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" />