Middle
Mi az a Content Provider és hogyan használják az Androidban?
sobes.tech MI
Válasz az MI-től
A Content Provider az Android egyik építőeleme (Application Component), amely szabványosított interfészt biztosít strukturált adatokhoz való hozzáféréshez és azok kezeléséhez. Szerepe közvetítőként működik az alkalmazás és az adatforrás között (például SQLite adatbázis, fájlok, hálózati adatok).
Használata:
- Adatok közös hozzáférése: Lehetővé teszi, hogy különböző alkalmazások biztonságosan hozzáférjenek ugyanahhoz az adathoz anélkül, hogy közvetlenül hozzáférnének az alapul szolgáló adatforráshoz.
- Engedélyek kezelése: Ellenőrzi, hogy mely alkalmazások férhetnek hozzá az adatokhoz, és milyen műveleteket (olvasás, írás, frissítés, törlés) hajthatnak végre.
- Adatforrás absztrakció: Elrejti az adatforrás megvalósításának részleteit az ügyfelek elől, egyszerűsítve az adatokhoz való hozzáférést.
- Integráció az Android Framework-kel: Olyan komponensek használják, mint a
CursorLoaderaz adatok aszinkron betöltéséhez a UI-ban, és aSyncAdapteraz adatok szinkronizálásához.
A Content Provider főbb metódusai:
// Lekérdezést hajt végre a szolgáltatónál, és Cursor-t ad vissza
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder);
// Új rekordot szúr be a szolgáltatóba, és az új rekord URI-ját adja vissza
public Uri insert(Uri uri, ContentValues values);
// Meglévő rekordokat frissít a szolgáltatóban, és a frissített sorok számát adja vissza
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs);
// Rekordokat töröl a szolgáltatóból, és a törölt sorok számát adja vissza
public int delete(Uri uri, String selection, String[] selectionArgs);
// Visszaadja az adott URI MIME-típusát
public String getType(Uri uri);
// Inicializálja a szolgáltatót a létrehozásakor
public boolean onCreate();
A Content Provider elérési URI formátuma a következő:
content://authority/path segment/id
ahol:
content://— szabványos séma a Content Providers számára.authority— egyedi karakterlánc, amely azonosítja a Content Providert (általában az alkalmazás csomagneve vagy része).path segment— opcionális rész, amely egy adott táblára vagy adathalmazra utal.id— opcionális rész, amely egy adott rekordra utal az adathalmazban.
Példa a ContentResolver használatára a Content Provider-rel való interakcióhoz:
// A ContentResolver példányának megszerzése
ContentResolver resolver = getContentResolver();
// Az adatok eléréséhez szükséges URI (pl. rendszer szintű kapcsolati szolgáltató)
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;
// Lekérdezés végrehajtása
Cursor cursor = resolver.query(contactsUri, null, null, null, null);
// Eredmény feldolgozása (a cursor bejárása)
if (cursor != null && cursor.moveToFirst()) {
// ... adatok olvasása a cursor-ból ...
cursor.close(); // Mindig zárja be a cursor-t!
}
A Content Provider regisztrálása az AndroidManifest.xml-ben:
<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" />