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 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 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 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.
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))
}
}
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 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.
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 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 turi | Ruxsat (API 33+) | Eski (API 29-32) |
|---|---|---|
| Tasvirlar | READ_MEDIA_IMAGES | READ_EXTERNAL_STORAGE |
| Video | READ_MEDIA_VIDEO | READ_EXTERNAL_STORAGE |
| Audio | READ_MEDIA_AUDIO | READ_EXTERNAL_STORAGE |
| Yozish | WRITE_EXTERNAL_STORAGE | WRITE_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.
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.
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.
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
}
}
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 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
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 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 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.
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 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
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.