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
CursorLoaderna asynchrónne načítanie údajov do UI aSyncAdapterna 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" />