Sobes.tech
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 Providers
  • authority — եզակի տող, որը նույնականացնում է 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" />