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
CursorLoaderpro asynchronní načítání dat do UI aSyncAdapterpro 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" />