Sobes.tech
Middle

Šta je Content Provider i kako se koristi u Androidu?

sobes.tech АИ

Одговор од АИ

Content Provider је један од градивних блокова Android-а (компонента Application Component), који пружа стандардизован интерфејс за приступ и управљање структурираним подацима. Он делује као посредник између апликације и извора података (на пример, SQLite база података, фајлови, мрежни подаци).

Користи се за:

  • Заједнички приступ подацима: Омогућава различитим апликацијама безбедан приступ истим подацима, без директног приступа основном извору података.
  • Управљање дозволама: Омогућава контролу које апликације имају приступ подацима и које операције (читати, писати, ажурирати, брисати) могу извршити.
  • Абрација извора података: Скрива детаље реализације извора података од клијената, поједностављујући приступ подацима.
  • Интеграција са Android Framework-ом: Користе се компоненти као што су CursorLoader за асинхроно учитавање података у UI, и 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" />