Middle
Провайдери мазмуро чист ва чӣ гуна дар Android истифода мешавад?
sobes.tech AI
Ҷавоб аз AI
Провайдери мазмўн (Content Provider) яке аз блокҳои сохтори Android (компоненти Application Component) мебошад, ки интерфейси стандартизатсияшуда барои дастрасӣ ва идоракунии маълумоти сохторӣ медиҳад. Вай ҳамчун миёнарав байни барнома ва манбаи маълумот (масалан, базаи додаҳои SQLite, файлҳо, маълумоти шабакавӣ) амал мекунад.
Барои:
- Дастрасии умумӣ ба маълумотҳо: Имкон медиҳад, ки барномаҳои гуногун бо бехатарӣ ба маълумоти якхела дастрасӣ пайдо кунанд, бидуни дастрасии мустақим ба манбаи асосӣ.
- Идоракунии иҷозатҳо: Назорат мекунад, ки кадом барномаҳо ба маълумотҳо дастрасӣ доранд ва кадом амалиётҳоро (хонданд, нависанд, навсозӣ, тоза) метавонанд иҷро кунанд.
- Абстраксияи манбаи маълумот: Тафсилоти иҷрои манбаи маълумотро аз мизоҷон пинҳон мекунад, дастрасиро ба маълумотҳо содда мекунад.
- Интегратсия бо Android Framework: Аз компонентҳое мисли
CursorLoaderбарои боркунии асинхронӣ ваSyncAdapterбарои ҳамоҳангсозӣ истифода мешавад.
Методҳои асосии Content Provider:
// Ба провайдер савол медиҳад ва Cursor бармегардонад
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder);
// Навъи навро дар провайдер ворид мекунад ва URI-и навро бармегардонад
public Uri insert(Uri uri, ContentValues values);
// Меъёри мавҷудбудаҳоро дар провайдер нав мекунад ва шумораи сатрҳои навсозишударо бармегардонад
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs);
// Сатрҳоро аз провайдер тоза мекунад ва шумораи сатрҳои тозашударо бармегардонад
public int delete(Uri uri, String selection, String[] selectionArgs);
// Намуди MIME-и маълумотро барои URI додааш бармегардонад
public String getType(Uri uri);
// Вақте ки провайдер сохта мешавад, онро оғоз мекунад
public boolean onCreate();
URI барои дастрасӣ ба Content Provider чунин шакл дорад:
content://authority/path segment/id
ки дар он:
content://— схема стандарти барои Content Providers.authority— сатрии беназири, ки Content Provider-ро муайян мекунад (одатан номи баста ё қисми он).path segment— қисми ихтиёрӣ, ки ба ҷадвал ё маҷмӯи маълумот ишора мекунад.id— қисми ихтиёрӣ, ки ба сабтҳои мушаххас дар маҷмӯи маълумот ишора мекунад.
Масалан, истифодаи ContentResolver барои муошират бо Content Provider:
// Гирифтани намунаи ContentResolver
ContentResolver resolver = getContentResolver();
// URI барои дастрасӣ ба маълумот (масалан, провайдери тамосҳои системӣ)
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;
// Иҷрои савол
Cursor cursor = resolver.query(contactsUri, null, null, null, null);
// Коркарди натиҷа (пешравии курсор)
if (cursor != null && cursor.moveToFirst()) {
// ... хондани маълумот аз курсор ...
cursor.close(); // Ҳамеша курсорро мебандед!
}
Тавсия дода мешавад, ки Content Provider дар 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" />