MediaStore API: bu nima, imkoniyatlari va umumiy media fayllar bilan ishlash

Muallif: IT Sectr Nashr etilgan: 2026-07-10 O'qish vaqti: 7 daq

MediaStore API — qurilmaning umumiy media fayllariga: tasvirlar, videolar, audio va hujjatlarga kirish uchun Android interfeysi. To'g'ridan-to'g'ri faylga kirishdan farqli o'laroq, MediaStore markazlashtirilgan media bazasi va kontent provayderi orqali ishlaydi. Android Developers Documentation (2025) ma'lumotlariga ko'ra, Android 10 dan boshlab API eskirgan READ_EXTERNAL_STORAGE o'rniga media bilan ishlashning asosiy mexanizmiga aylandi. Dasturchilar MediaStore-dan galereyalar, musiqa pleerlar, kameralar va fayl menejerlarida foydalanadilar.

Asosiy nuqtalar

  • MediaStore — qurilmaning umumiy media fayllariga kirish uchun Android tizim kontent provayderi.
  • Media bazasi qurilmadagi barcha tasvirlar, videolar va audiolarni markazlashtirilgan holda indekslaydi.
  • Android 10 MediaStore-ni umumiy media fayllarga kirishning yagona usuliga aylantirdi.
  • Uri-havolalar to'g'ridan-to'g'ri fayl yo'llarini almashtirib, xavfsiz kirishni ta'minlaydi.
  • Ruxsatlar media turlari bo'yicha so'raladi: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO.

MediaStore API nima?

MediaStore API — Android platformasida qurilmaning media fayllarini indekslash, saqlash va kirishni ta'minlash uchun mo'ljallangan tizim kontent provayderi. API Android SDK tarkibiga kiradi va API Level 1 dan boshlab mavjud.

MediaStore yagona media bazasi orqali ishlaydi, u qurilmani avtomatik skanerlaydi va barcha media fayllarning metama'lumotlarini to'playdi. Baza tizim tomonidan yangilanadi fayllar qo'shilganda, o'zgartirilganda yoki o'chirilganda, shuning uchun dasturlar har doim qo'lda skanerlamasdan dolzarb ma'lumot oladi.

MediaStore-ning asosiy jadvallari: Images (tasvirlar), Video (videolar), Audio (audiolar) va Files (umumiy fayllar). Har bir jadvalda metama'lumotlar ustunlari mavjud: nom, yaratilish sanasi, hajmi, MIME turi, GPS koordinatalari va boshqa atributlar.

Android versiyalarida MediaStore evolyutsiyasi

Android 10 dan oldin dasturchilar qurilmaning barcha fayllariga kirish uchun READ_EXTERNAL_STORAGE dan foydalanardilar. Android 10 (API 29) Scoped Storage ni joriy qildi: dasturlar faqat o'z fayllariga va MediaStore orqali kirish oldi. Android 11 siyosatni qattiqlashtirib, umumiy kataloglarga to'g'ridan-to'g'ri yo'lni butunlay blokladi.

Android 13 (API 33) dan boshlab, Google READ_EXTERNAL_STORAGE ni aniq ruxsatlar bilan almashtirdi: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO va READ_MEDIA_AUDIO. Bu foydalanuvchiga butun xotirani ochmasdan faqat ma'lum media turlariga kirish ruxsatini berish imkonini beradi.

MediaStore qanday ishlaydi: arxitektura va media bazasi

MediaStore kontent provayderi arxitekturasida qurilgan: har bir dastur unga ContentResolver va Uri orqali murojaat qiladi. Tizim media skaneri — MediaScannerConnection — yuklash, USB ulanish yoki qayta ishga tushirish paytida qurilmadagi barcha fayllarni avtomatik indekslaydi.

Media bazasi tizim ma'lumotlar bazasida saqlanadi va har bir media fayl uchun yozuvlarni o'z ichiga oladi. Ustunlar turli turlar uchun farqlanadi: tasvirlarda ORIENTATION va DATE_TAKEN, videolarda — DURATION, audiolarda — ARTIST va ALBUM mavjud. Dasturchilar filtrlash uchun projection va selection bilan query orqali SQL-ga o'xshash so'rovlarni bajarishlari mumkin.

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 va ularning ahamiyati

Har bir media fayl content://media/external/images/media/1234 ko'rinishidagi Content URI bilan identifikatsiya qilinadi. Tashqi URI (external) umumiy xotirani, ichki (internal) — tizim media fayllarini ko'rsatadi. URI dan fayl yo'llari o'rniga foydalanish — MediaStore-ning asosiy afzalligi: dastur fayl tizimiga kirishni talab qilmaydi va xavfsiz kontent provayderi orqali ishlaydi.

MediaStore-da media fayl turlari

MediaStore to'rtta asosiy media turini qo'llab-quvvatlaydi, har biri alohida jadval va metama'lumotlar to'plami bilan. Dasturchilar dastur ishlayotgan kontent turiga qarab tegishli jadvalni tanlaydilar.

  • MediaStore.Images — fotosuratlar, ekran tasvirlari va chizmalar. Ustunlar: BUCKET_DISPLAY_NAME, IS_PRIVATE, LATITUDE, LONGITUDE.
  • MediaStore.Video — video yozuvlar va filmlar. Ustunlar: DURATION, RESOLUTION, IS_DRM.
  • MediaStore.Audio — musiqa treklari va tovush fayllari. Ustunlar: ARTIST, ALBUM, COMPOSER, TRACK.
  • MediaStore.Files — hujjatlar va qolgan fayllar. Android 10 dan boshlab umumiy kirish uchun mavjud.

Standart ustunlardan tashqari, har bir jadvalda tizim maydonlari mavjud: _ID, DATA (eskirgan), SIZE, MIME_TYPE, DATE_ADDED, DATE_MODIFIED. Android 10 versiyasidan DATA maydoni deprecated deb belgilangan va dasturchilar URI bo'yicha InputStream ochish orqali ishlashlari kerak.

MediaStore bilan ishlash uchun ruxsatlar

MediaStore Android versiyasiga qarab farq qiladigan aniq ruxsatlarni talab qiladi. Android 13 dan oldin yagona READ_EXTERNAL_STORAGE ruxsati ishlatilgan. Android 13 (API 33) dan boshlab, Google har bir media turi uchun aniq ruxsatlarni joriy qildi.

Media turiRuxsat (API 33+)Eski (API 29-32)
TasvirlarREAD_MEDIA_IMAGESREAD_EXTERNAL_STORAGE
VideoREAD_MEDIA_VIDEOREAD_EXTERNAL_STORAGE
AudioREAD_MEDIA_AUDIOREAD_EXTERNAL_STORAGE
YozishWRITE_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE

MediaStore-ga yozish ham Android 9 va pastki versiyalar uchun WRITE_EXTERNAL_STORAGE talab qiladi. Android 10 dan boshlab, dastur qo'shimcha ruxsatlarsiz o'z fayllarini MediaStore-ga yozishi mumkin — tizim ContentResolver.insert orqali yozuv kiritishda avtomatik kirishni ta'minlaydi.

Ish vaqtida ruxsatlarni so'rash

MediaStore ruxsatlari standart ActivityResultContracts.RequestMultiplePermissions mexanizmi orqali so'raladi. Foydalanuvchi so'rovni rad etishi mumkin va dastur bu stsenariyni to'g'ri boshqarishi kerak. MediaStore-ga har murojaatdan oldin ContextCompat.checkSelfPermission orqali ruxsat mavjudligini tekshirish tavsiya etiladi.

Kod namunalari: MediaStore orqali o'qish va yozish

MediaStore nafaqat o'qish, balki media fayllarni yozishga ham imkon beradi. Tasvir yoki video yozish uchun dasturchi ContentResolver.insert dan foydalanadi va qaytarilgan URI bo'yicha OutputStream ochadi. Tizim avtomatik ravishda faylni media bazasiga qo'shadi va indekslaydi.

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 ->
        // baytlarni oqimga yozish
    }
}

MediaStore orqali media fayllarni o'chirish

O'chirish ContentResolver.delete orqali fayl URI sini ko'rsatib amalga oshiriladi. Tizim kirish huquqlarini tekshiradi: agar fayl joriy dasturga tegishli bo'lsa, o'chirish qo'shimcha ruxsatlarsiz amalga oshadi. Android 10+ da boshqa dasturlarning fayllari uchun tizim dialogi orqali foydalanuvchi tasdiqi talab qilinadi.

MediaStore va to'g'ridan-to'g'ri faylga kirish

MediaStore API File API orqali to'g'ridan-to'g'ri faylga kirishdan tubdan farq qiladi. Fayl yo'llari o'rniga Content URI, fayl operatsiyalari o'rniga — ContentResolver metodlari ishlatiladi. Bu uchta asosiy ustunlik beradi: xavfsizlik, avtomatik indekslash va yagona interfeys.

To'g'ridan-to'g'ri faylga kirish Android 10+ da umumiy kataloglar uchun cheklangan. MediaStore Pictures, DCIM, Movies, Music va Download dan media o'qishning yagona usuli bo'lib qoladi. Dasturning o'z fayllari (app-specific storage) uchun to'g'ridan-to'g'ri kirish qoladi — bu Android/data va Android/media papkalari.

MediaStore va to'g'ridan-to'g'ri kirish o'rtasidagi tanlov kontent turiga bog'liq. MediaStore boshqa dasturlar uchun mavjud bo'lgan umumiy media fayllar uchun majburiydir. To'g'ridan-to'g'ri File API dasturning ichki fayllari va kesh uchun mos keladi. Storage Access Framework tizim tanlagichi orqali ixtiyoriy hujjatlarni tanlash uchun ishlatiladi.

Tez-tez beriladigan savollar

Android-da MediaStore API nima?

MediaStore API — qurilmaning media fayllariga: tasvirlar, videolar, audiolar va hujjatlarga kirish uchun Android tizim kontent provayderi. API ContentResolver va barcha fayllarni avtomatik indekslaydigan media bazasi orqali yagona interfeys ta'minlaydi.

MediaStore qanday media turlarini qo'llab-quvvatlaydi?

MediaStore Images (tasvirlar), Video (videolar), Audio (audiolar) va Files (hujjatlar) ni qo'llab-quvvatlaydi. Har bir tur o'z metama'lumotlar to'plami bilan alohida jadvalga ega: tasvirlarda ORIENTATION, videolarda — DURATION, audiolarda — ARTIST.

Android 13 da MediaStore uchun qanday ruxsatlar kerak?

Android 13+ da aniq ruxsatlar ishlatiladi: tasvirlar uchun READ_MEDIA_IMAGES, video uchun READ_MEDIA_VIDEO va audio uchun READ_MEDIA_AUDIO. Foydalanuvchi faqat ma'lum media turlariga kirish ruxsatini berishi mumkin.

MediaStore orqali faylni qanday yozish mumkin?

Yozish uchun nom va MIME turi bilan ContentValues yarating, URI olish uchun ContentResolver.insert ni chaqiring, so'ng ContentResolver.openOutputStream orqali OutputStream oching. Tizim avtomatik ravishda yangi faylni indekslaydi.

MediaStore Storage Access Framework dan nimasi bilan farq qiladi?

MediaStore media bazasi orqali qurilmaning barcha media fayllariga dasturiy kirishni ta'minlaydi. Storage Access Framework fayl tanlash uchun tizim dialogini ochadi va URI qaytaradi — foydalanuvchi aniq fayl yoki papkani tanlaydi.

Xulosa

  • MediaStore API — kontent provayderi va media bazasi orqali ishlaydigan Android media fayllariga kirishning asosiy mexanizmi.
  • Media bazasi tasvirlar, videolar, audiolar va hujjatlarni avtomatik indekslab, ContentResolver orqali metama'lumotlarga kirishni ta'minlaydi.
  • Android 10 MediaStore-ni umumiy media fayllarga kirishning yagona usuliga aylantirib, to'g'ridan-to'g'ri faylga kirishni chekladi.
  • Android 13 yagona READ_EXTERNAL_STORAGE o'rniga READ_MEDIA_IMAGES, READ_MEDIA_VIDEO va READ_MEDIA_AUDIO aniq ruxsatlarini joriy qildi.
  • Content URI fayl yo'llarini almashtirib, boshqa dasturlarning fayllariga root huquqlarisiz xavfsiz kirishni ta'minlaydi.
  • MediaStore orqali yozish ContentResolver.insert va openOutputStream bilan media bazasida avtomatik indekslash orqali amalga oshiriladi.
  • Tanlov MediaStore va SAF o'rtasida vazifaga bog'liq: MediaStore — media bilan ommaviy ish uchun, SAF — foydalanuvchi tomonidan alohida fayllarni tanlash uchun.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing