Middle
Kas yra Content Provider ir kaip jis naudojamas Android?
sobes.tech AI
Atsakymas iš AI
Content Provider yra vienas iš Android statybinių blokų (Application Component), kuris teikia standartizuotą sąsają prieigos prie struktūrizuotų duomenų ir jų valdymo. Jis veikia kaip tarpininkas tarp programėlės ir duomenų šaltinio (pvz., SQLite duomenų bazės, failų, tinklo duomenų).
Naudojamas:
- Bendras duomenų prieigos taškas: Leidžia skirtingoms programėlėms saugiai pasiekti tuos pačius duomenis, nesant tiesioginio prieigos prie pagrindinio duomenų šaltinio.
- Leidimų valdymas: Kontroliuoja, kurios programėlės gali pasiekti duomenis ir kokias operacijas (skaityti, rašyti, atnaujinti, ištrinti) jos gali atlikti.
- Duomenų šaltinio abstrakcija: Slėpia duomenų šaltinio įgyvendinimo detales nuo klientų, supaprastindamas duomenų prieigą.
- Integracija su Android Framework: Naudojami tokie komponentai kaip
CursorLoaderasinchroniniam duomenų įkėlimui į UI irSyncAdapterduomenų sinchronizacijai.
Pagrindiniai Content Provider metodai:
// Vykdo užklausą į teikėją ir grąžina Cursor
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder);
// Įterpia naują įrašą į teikėją ir grąžina naujo įrašo URI
public Uri insert(Uri uri, ContentValues values);
// Atnaujina esamus įrašus teikėjoje ir grąžina atnaujintų eilučių skaičių
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs);
// Ištrina įrašus iš teikėjo ir grąžina ištrintų eilučių skaičių
public int delete(Uri uri, String selection, String[] selectionArgs);
// Grąžina MIME tipą duomenų pagal šį URI
public String getType(Uri uri);
// Inicializuoja teikėją jo sukūrimo metu
public boolean onCreate();
URI prieigai prie Content Provider turi šį formatą:
content://authority/path segment/id
kur:
content://— standartinė schema Content Providersauthority— unikalus eilutė, identifikuojanti Content Provider (dažniausiai programėlės paketo pavadinimas arba jo dalis)path segment— neprivalomas, nurodo konkretų lentelę arba duomenų rinkinįid— neprivalomas, nurodo konkretų įrašą duomenų rinkinyje
Pavyzdys naudojant ContentResolver:
// Gauti ContentResolver pavyzdį
ContentResolver resolver = getContentResolver();
// URI duomenų pasiekti (pvz., sisteminis kontaktų teikėjas)
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;
// Vykdyti užklausą
Cursor cursor = resolver.query(contactsUri, null, null, null, null);
// Apdoroti rezultatą (peržvelgti cursor)
if (cursor != null && cursor.moveToFirst()) {
// ... skaityti duomenis iš cursor
cursor.close(); // Visada uždarykite cursor!
}
Content Provider registruojamas 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" />