Middle
Czym jest Content Provider i jak jest używany w Androidzie?
sobes.tech AI
Odpowiedź od AI
Content Provider — jest jednym z podstawowych elementów Androida (komponent Application Component), który zapewnia zunifikowany interfejs do dostępu i zarządzania danymi strukturalnymi. Działa jako pośrednik między aplikacją a źródłem danych (np. baza danych SQLite, pliki, dane sieciowe).
Używa się go do:
- Wspólnego dostępu do danych: Umożliwia różnym aplikacjom bezpieczny dostęp do tych samych danych bez bezpośredniego dostępu do źródła danych.
- Zarządzania uprawnieniami: Pozwala kontrolować, które aplikacje mają dostęp do danych i jakie operacje (odczyt, zapis, aktualizacja, usuwanie) mogą wykonywać.
- Abstrakcji źródła danych: Ukrywa szczegóły implementacji źródła danych przed klientami, upraszczając dostęp do danych.
- Integracji z frameworkiem Android: Używany przez komponenty takie jak
CursorLoaderdo asynchronicznego ładowania danych w UI orazSyncAdapterdo synchronizacji danych.
Główne metody Content Provider:
// Wykonuje zapytanie do providera i zwraca Cursor
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder);
// Wstawia nowy wpis do providera i zwraca URI nowego wpisu
public Uri insert(Uri uri, ContentValues values);
// Aktualizuje istniejące wpisy w providerze i zwraca liczbę zaktualizowanych wierszy
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs);
// Usuwa wpisy z providera i zwraca liczbę usuniętych wierszy
public int delete(Uri uri, String selection, String[] selectionArgs);
// Zwraca typ MIME danych dla danego URI
public String getType(Uri uri);
// Inicjuje providera podczas jego tworzenia
public boolean onCreate();
Format URI do dostępu do Content Provider:
content://authority/path segment/id
gdzie:
content://— standardowy schemat dla Content Providers.authority— unikalny ciąg identyfikujący Content Provider (zwykle nazwa pakietu aplikacji lub jej część).path segment— opcjonalna część wskazująca na konkretną tabelę lub zestaw danych.id— opcjonalna część wskazująca na konkretny rekord w zestawie danych.
Przykład użycia ContentResolver do interakcji z Content Provider:
// Uzyskanie instancji ContentResolver
ContentResolver resolver = getContentResolver();
// URI do dostępu do danych (np. systemowy provider kontaktów)
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;
// Wykonanie zapytania
Cursor cursor = resolver.query(contactsUri, null, null, null, null);
// Przetwarzanie wyniku (przechodzenie po cursorze)
if (cursor != null && cursor.moveToFirst()) {
// ... odczyt danych z cursor
cursor.close(); // Zawsze zamykaj cursor!
}
Rejestracja Content Provider w 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" />