MediaStore API: шта је то, могућности и рад са заједничким медијским датотекама

Аутор: IT Sectr Објављено: 2026-07-10 Време читања: 7 мин

MediaStore API — је Android интерфејс за приступ заједничким медијским датотекама уређаја: сликама, видеима, аудио записима и документима. За разлику од директног приступа датотекама, MediaStore ради преко централизоване медијске базе и провајдера садржаја. Према Android Developers Documentation (2025), почевши од Android-а 10 API је постао главни механизам рада са медијима уместо застарелог READ_EXTERNAL_STORAGE. Програмери користе MediaStore у галеријама, музичким плејерима, камерама и менаџерима датотека.

Главне тачке

  • MediaStore — системски провајдер садржаја Android-а за приступ заједничким медијским датотекама уређаја.
  • Медијска база централизовано индексира све слике, видее и аудио записе на уређају.
  • Android 10 је учинио MediaStore јединим начином приступа заједничким медијским датотекама.
  • Uri линкови замењују директне путање датотека, обезбеђујући сигуран приступ.
  • Дозволе се захтевају по врстама медија: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO.

Шта је MediaStore API?

MediaStore API — је системски провајдер садржаја на Android платформи, намењен за индексирање, складиштење и обезбеђивање приступа медијским датотекама уређаја. API је део Android SDK-а и доступан је од API Level 1.

MediaStore ради преко јединствене медијске базе која аутоматски скенира уређај и прикупља метаподатке свих медијских датотека. База се ажурира од стране система при додавању, мењању или брисању датотека, тако да апликације увек добијају ажурне информације без ручног скенирања.

Главне табеле MediaStore-а: Images (слике), Video (видеи), Audio (аудио) и Files (опште датотеке). Свака табела садржи колоне са метаподацима: назив, датум креирања, величина, MIME тип, GPS координате и други атрибути.

Еволуција MediaStore-а у верзијама Android-а

Пре Android-а 10, програмери су користили READ_EXTERNAL_STORAGE за приступ свим датотекама уређаја. Android 10 (API 29) је увео Scoped Storage: апликације су добиле приступ само својим датотекама и преко MediaStore-а. Android 11 је пооштрио политику, потпуно блокирајући директну путању до дељених директоријума.

Почевши од Android-а 13 (API 33), Google је заменио READ_EXTERNAL_STORAGE грануларним дозволама: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO и READ_MEDIA_AUDIO. Ово омогућава кориснику да да приступ само одређеним врстама медија без откривања целог складишта.

Како MediaStore ради: архитектура и медијска база

MediaStore је изграђен на архитектури провајдера садржаја: свака апликација му приступа преко ContentResolver-а и Uri-ја. Системски скенер медија — MediaScannerConnection — аутоматски индексира све датотеке на уређају при покретању, USB повезивању или рестартовању.

Медијска база се чува у системској бази података и садржи записе за сваку медијску датотеку. Колоне се разликују за различите типове: слике имају ORIENTATION и DATE_TAKEN, видеи — DURATION, аудио — ARTIST и ALBUM. Програмери могу извршавати SQL-сличне упите преко query са projection и selection за филтрирање.

kotlin
val projection = arrayOf(
    MediaStore.Images.Media._ID,
    MediaStore.Images.Media.DISPLAY_NAME,
    MediaStore.Images.Media.DATE_ADDED
)

val cursor = contentResolver.query(
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
    projection,
    null,
    null,
    MediaStore.Images.Media.DATE_ADDED + " DESC"
)

cursor?.use {
    while (moveToNext()) {
        val name = getString(getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME))
    }
}

Content URI и њихов значај

Свака медијска датотека се идентификује Content URI-јем облика content://media/external/images/media/1234. Спољни URI (external) указује на заједничко складиште, унутрашњи (internal) — на системске медијске датотеке. Коришћење URI-ja уместо путања датотека — кључна предност MediaStore-а: апликација не захтева приступ систему датотека и ради преко сигурног провајдера садржаја.

Врсте медијских датотека у MediaStore-у

MediaStore подржава четири главне врсте медија, сваку са посебном табелом и скупом метаподатака. Програмери бирају одговарајућу табелу у зависности од врсте садржаја са којом апликација ради.

  • MediaStore.Images — фотографије, снимци екрана и цртежи. Колоне: BUCKET_DISPLAY_NAME, IS_PRIVATE, LATITUDE, LONGITUDE.
  • MediaStore.Video — видео снимци и филмови. Колоне: DURATION, RESOLUTION, IS_DRM.
  • MediaStore.Audio — музичке нумере и звучне датотеке. Колоне: ARTIST, ALBUM, COMPOSER, TRACK.
  • MediaStore.Files — документи и остале датотеке. Доступан од Android-а 10 за општи приступ.

Поред стандардних колона, свака табела садржи системска поља: _ID, DATA (застарео), SIZE, MIME_TYPE, DATE_ADDED, DATE_MODIFIED. Од верзије Android 10 поље DATA је означено као deprecated, и програмери треба да раде преко отварања InputStream по URI-ју.

Дозволе за рад са MediaStore-ом

MediaStore захтева експлицитне дозволе које се разликују у зависности од верзије Android-а. Пре Android-а 13 користила се јединствена дозвола READ_EXTERNAL_STORAGE. Почевши од Android-а 13 (API 33), Google је увео грануларне дозволе за сваку врсту медија.

Врста медијаДозвола (API 33+)Стара (API 29-32)
СликеREAD_MEDIA_IMAGESREAD_EXTERNAL_STORAGE
ВидеоREAD_MEDIA_VIDEOREAD_EXTERNAL_STORAGE
АудиоREAD_MEDIA_AUDIOREAD_EXTERNAL_STORAGE
ПисањеWRITE_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE

Писање у MediaStore такође захтева WRITE_EXTERNAL_STORAGE за Android 9 и ниже. Почевши од Android-а 10, апликација може да пише сопствене датотеке у MediaStore без додатних дозвола — систем аутоматски одобрава приступ при уметању записа преко ContentResolver.insert.

Захтевање дозвола у runtime-у

MediaStore дозволе се захтевају преко стандардног механизма ActivityResultContracts.RequestMultiplePermissions. Корисник може да одбије захтев, а апликација треба да правилно обради овај сценарио. Препоручује се провера присуства дозволе преко ContextCompat.checkSelfPermission пре сваког приступа MediaStore-у.

Примери кода: читање и писање преко MediaStore-а

MediaStore омогућава не само читање, већ и писање медијских датотека. За писање слике или видеа, програмер користи ContentResolver.insert и отвара OutputStream по враћеном URI-ју. Систем аутоматски додаје датотеку у медијску базу и индексира је.

kotlin
val values = ContentValues().apply {
    put(MediaStore.Images.Media.DISPLAY_NAME, "photo_2025.jpg")
    put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
    put(MediaStore.Images.Media.RELATIVE_PATH, "Pictures/MyApp")
}

val uri = contentResolver?.insert(
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values
)

uri?.let {
    val outputStream = contentResolver?.openOutputStream(it)
    outputStream?.use { stream ->
        // упишите бајтове у ток
    }
}

Брисање медијских датотека преко MediaStore-а

Брисање се врши преко ContentResolver.delete са навођењем URI-ја датотеке. Систем проверава права приступа: ако датотека припада тренутној апликацији, брисање се одвија без додатних дозвола. За датотеке других апликација на Android 10+ потребна је потврда корисника преко системског дијалога.

MediaStore vs директни приступ датотекама

MediaStore API се суштински разликује од директног приступа датотекама преко File API-ја. Уместо путања датотека користе се Content URI, а уместо операција са датотекама — ContentResolver методе. Ово даје три кључне предности: безбедност, аутоматско индексирање и јединствени интерфејс.

Директни приступ датотекама је ограничен на Android 10+ за дељене директоријуме. MediaStore остаје једини начин читања медија из Pictures, DCIM, Movies, Music и Download. За сопствене датотеке апликације (app-specific storage) директан приступ остаје — то су фолдери у Android/data и Android/media.

Избор између MediaStore-а и директног приступа зависи од врсте садржаја. MediaStore је обавезан за заједничке медијске датотеке доступне другим апликацијама. Директни File API је погодан за интерне датотеке апликације и кеш. Storage Access Framework се користи за избор произвољних докумената преко системског бирача.

Често постављана питања

Шта је MediaStore API у Android-у?

MediaStore API — је системски провајдер садржаја Android-а за приступ медијским датотекама уређаја: сликама, видеима, аудио записима и документима. API пружа јединствени интерфејс преко ContentResolver-а и медијске базе која аутоматски индексира све датотеке.

Које врсте медија подржава MediaStore?

MediaStore подржава Images (слике), Video (видее), Audio (аудио) и Files (документе). Свака врста има посебну табелу са својим скупом метаподатака: слике имају ORIENTATION, видеи — DURATION, аудио — ARTIST.

Које дозволе су потребне за MediaStore на Android 13?

На Android 13+ користе се грануларне дозволе: READ_MEDIA_IMAGES за слике, READ_MEDIA_VIDEO за видео и READ_MEDIA_AUDIO за аудио. Корисник може да одобри приступ само одређеним врстама медија.

Како написати датотеку преко MediaStore-а?

За писање креирајте ContentValues са именом и MIME типом, позовите ContentResolver.insert да бисте добили URI, затим отворите OutputStream преко ContentResolver.openOutputStream. Систем аутоматски индексира нову датотеку.

По чему се MediaStore разликује од Storage Access Framework-а?

MediaStore пружа програмски приступ свим медијским датотекама уређаја преко медијске базе. Storage Access Framework отвара системски дијалог за избор датотеке и враћа URI — корисник бира конкретну датотеку или фолдер.

Закључак

  • MediaStore API — главни механизам приступа медијским датотекама Android-а, који ради преко провајдера садржаја и медијске базе.
  • Медијска база аутоматски индексира слике, видее, аудио и документе, пружајући приступ метаподацима преко ContentResolver-а.
  • Android 10 је учинио MediaStore јединим начином приступа заједничким медијским датотекама, ограничивши директни приступ датотекама.
  • Android 13 је увео грануларне дозволе READ_MEDIA_IMAGES, READ_MEDIA_VIDEO и READ_MEDIA_AUDIO уместо јединственог READ_EXTERNAL_STORAGE.
  • Content URI замењују путање датотека, обезбеђујући сигуран приступ без root права датотекама других апликација.
  • Писање преко MediaStore-а се врши преко ContentResolver.insert и openOutputStream са аутоматским индексирањем у медијској бази.
  • Избор између MediaStore-а и SAF-а зависи од задатка: MediaStore — за групни рад са медијима, SAF — за избор појединачних датотека од стране корисника.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође