Middle
Ի՞նչ է Content Provider-ը և ինչպես է այն օգտագործվում 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);
// Վերադարձնում է տվյալ URI-ի MIME տիպը
public String getType(Uri uri);
// Ծրագրի ստեղծման ժամանակ initialize է անում
public boolean onCreate();
Տվյալների հասանելի URI ձևաչափը՝
content://authority/path segment/id
որտեղ՝
content://— ստանդարտ շեմակ for Content Providersauthority— եզակի տող, որը նույնականացնում է Content Provider-ը (հաճախ՝ ծրագրի փաթեթի անունը կամ նրա մաս)path segment— պարտադիր չէ, նշում է կոնկրետ աղյուսակ կամ տվյալների հավաքածուid— պարտադիր չէ, նշում է կոնկրետ գրառում տվյալների հավաքածուում
Օրինակ՝ ContentResolver օգտագործելով՝
// 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" />