MediaStore API — cihazın ümumi media fayllarına: şəkillərə, videolara, audiolara və sənədlərə giriş üçün Android interfeysidir. Birbaşa fayl girişindən fərqli olaraq, MediaStore mərkəzləşdirilmiş media bazası və məzmun provayderi vasitəsilə işləyir. Android Developers Documentation (2025) məlumatına görə, Android 10-dan başlayaraq API köhnəlmiş READ_EXTERNAL_STORAGE əvəzinə media ilə işin əsas mexanizminə çevrildi. Tərtibatçılar MediaStore-dan qalereyalarda, musiqi pleyerlərində, kameralarda və fayl menecerlərində istifadə edirlər.
Əsas məqamlar
MediaStore API — Android platformasında cihazın media fayllarını indeksləşdirmək, saxlamaq və giriş təmin etmək üçün nəzərdə tutulmuş sistem məzmun provayderidir. API Android SDK-nın tərkibinə daxildir və API Level 1-dən etibarən mövcuddur.
MediaStore vahid media bazası vasitəsilə işləyir, o cihazı avtomatik skan edir və bütün media fayllarının metadata məlumatlarını toplayır. Baza sistem tərəfindən yenilənir fayllar əlavə edildikdə, dəyişdirildikdə və ya silindikdə, beləliklə tətbiqlər həmişə əl ilə skan etmədən aktual məlumat alır.
MediaStore-un əsas cədvəlləri: Images (şəkillər), Video (videolar), Audio (audiolar) və Files (ümumi fayllar). Hər cədvəldə metadata sütunları var: ad, yaradılma tarixi, ölçü, MIME növü, GPS koordinatları və digər atributlar.
Android 10-dan əvvəl tərtibatçılar cihazın bütün fayllarına giriş üçün READ_EXTERNAL_STORAGE istifadə edirdilər. Android 10 (API 29) Scoped Storage təqdim etdi: tətbiqlər yalnız öz fayllarına və MediaStore vasitəsilə giriş əldə etdilər. Android 11 siyasəti sərtləşdirərək paylaşılan qovluqlara birbaşa yolu tamamilə blokladı.
Android 13 (API 33)-dən başlayaraq, Google READ_EXTERNAL_STORAGE-ni xırdalanmış icazələrlə əvəz etdi: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO və READ_MEDIA_AUDIO. Bu, istifadəçiyə bütün yaddaşı açmadan yalnız müəyyən media növlərinə giriş icazəsi verməyə imkan verir.
MediaStore məzmun provayderi arxitekturası ilə qurulub: hər tətbiq ona ContentResolver və Uri vasitəsilə müraciət edir. Sistem media skaneri — MediaScannerConnection — yükləmə, USB qoşulması və ya yenidən başlatma zamanı cihazdakı bütün faylları avtomatik indeksləşdirir.
Media bazası sistem verilənlər bazasında saxlanılır və hər media faylı üçün qeydlər ehtiva edir. Sütunlar müxtəlif növlər üçün fərqlənir: şəkillərdə ORIENTATION və DATE_TAKEN, videolarda — DURATION, audiolarda — ARTIST və ALBUM var. Tərtibatçılar filtrasiya üçün projection və selection ilə query vasitəsilə SQL-ə bənzər sorğular yerinə yetirə bilərlər.
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))
}
}
Hər media faylı content://media/external/images/media/1234 şəklində Content URI ilə identifikasiya olunur. Xarici URI (external) ümumi yaddaşı, daxili (internal) — sistem media fayllarını göstərir. URI-dən fayl yolları əvəzinə istifadə — MediaStore-un əsas üstünlüyü: tətbiq fayl sisteminə giriş tələb etmir və təhlükəsiz məzmun provayderi vasitəsilə işləyir.
MediaStore dörd əsas media növünü dəstəkləyir, hər biri ayrı cədvəl və metadata dəsti ilə. Tərtibatçılar tətbiqin işlədiyi məzmun növündən asılı olaraq müvafiq cədvəli seçirlər.
Standart sütunlardan əlavə, hər cədvəldə sistem sahələri var: _ID, DATA (köhnəlmiş), SIZE, MIME_TYPE, DATE_ADDED, DATE_MODIFIED. Android 10 versiyasından DATA sahəsi deprecated olaraq qeyd edilib və tərtibatçılar URI üzrə InputStream açaraq işləməlidirlər.
MediaStore Android versiyasından asılı olaraq fərqlənən açıq icazələr tələb edir. Android 13-dən əvvəl vahid READ_EXTERNAL_STORAGE icazəsi istifadə olunurdu. Android 13 (API 33)-dən başlayaraq, Google hər media növü üçün xırdalanmış icazələr təqdim etdi.
| Media növü | İcazə (API 33+) | Köhnə (API 29-32) |
|---|---|---|
| Şəkillər | READ_MEDIA_IMAGES | READ_EXTERNAL_STORAGE |
| Video | READ_MEDIA_VIDEO | READ_EXTERNAL_STORAGE |
| Audio | READ_MEDIA_AUDIO | READ_EXTERNAL_STORAGE |
| Yazma | WRITE_EXTERNAL_STORAGE | WRITE_EXTERNAL_STORAGE |
MediaStore-a yazmaq da Android 9 və aşağısı üçün WRITE_EXTERNAL_STORAGE tələb edir. Android 10-dan başlayaraq, tətbiq əlavə icazələr olmadan öz fayllarını MediaStore-a yaza bilər — sistem ContentResolver.insert vasitəsilə qeyd daxil edərkən avtomatik giriş təmin edir.
MediaStore icazələri standart ActivityResultContracts.RequestMultiplePermissions mexanizmi vasitəsilə tələb olunur. İstifadəçi sorğunu rədd edə bilər və tətbiq bu ssenarini düzgün idarə etməlidir. MediaStore-a hər müraciətdən əvvəl ContextCompat.checkSelfPermission vasitəsilə icazənin mövcudluğunu yoxlamaq tövsiyə olunur.
MediaStore təkcə oxumağa deyil, həm də media fayllarını yazmağa imkan verir. Şəkil və ya video yazmaq üçün tərtibatçı ContentResolver.insert istifadə edir və qaytarılmış URI üzrə OutputStream açır. Sistem avtomatik olaraq faylı media bazasına əlavə edir və indeksləşdirir.
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 ->
// baytları axına yaz
}
}
Silinmə ContentResolver.delete vasitəsilə faylın URI-ni göstərərək yerinə yetirilir. Sistem giriş hüquqlarını yoxlayır: fayl cari tətbiqə məxsusdursa, silinmə əlavə icazələr olmadan baş verir. Android 10+-da digər tətbiqlərin faylları üçün sistem dialoqu vasitəsilə istifadəçi təsdiqi tələb olunur.
MediaStore API File API vasitəsilə birbaşa fayl girişindən prinsipial olaraq fərqlənir. Fayl yolları əvəzinə Content URI, fayl əməliyyatları əvəzinə — ContentResolver metodları istifadə olunur. Bu üç əsas üstünlük verir: təhlükəsizlik, avtomatik indeksləşdirmə və vahid interfeys.
Birbaşa fayl girişi Android 10+-da ümumi qovluqlar üçün məhdudlaşdırılıb. MediaStore Pictures, DCIM, Movies, Music və Download-dan media oxumağın yeganə yolu olaraq qalır. Tətbiqin öz faylları (app-specific storage) üçün birbaşa giriş qalır — bunlar Android/data və Android/media qovluqlarıdır.
MediaStore və birbaşa giriş arasında seçim məzmun növündən asılıdır. MediaStore digər tətbiqlər üçün əlçatan olan ümumi media faylları üçün məcburidir. Birbaşa File API tətbiqin daxili faylları və keş yaddaşı üçün uyğundur. Storage Access Framework sistem seçicisi vasitəsilə ixtiyari sənədlərin seçilməsi üçün istifadə olunur.
Tez-tez verilən suallar
MediaStore API — cihazın media fayllarına: şəkillərə, videolara, audiolara və sənədlərə giriş üçün Android sistem məzmun provayderidir. API ContentResolver və bütün faylları avtomatik indeksləşdirən media bazası vasitəsilə vahid interfeys təmin edir.
MediaStore Images (şəkillər), Video (videolar), Audio (audiolar) və Files (sənədlər) dəstəkləyir. Hər növün öz metadata dəsti ilə ayrı cədvəli var: şəkillərdə ORIENTATION, videolarda — DURATION, audiolarda — ARTIST.
Android 13+-da xırdalanmış icazələr istifadə olunur: şəkillər üçün READ_MEDIA_IMAGES, video üçün READ_MEDIA_VIDEO və audio üçün READ_MEDIA_AUDIO. İstifadəçi yalnız müəyyən media növlərinə giriş icazəsi verə bilər.
Yazmaq üçün ad və MIME növü ilə ContentValues yaradın, URI əldə etmək üçün ContentResolver.insert çağırın, sonra ContentResolver.openOutputStream vasitəsilə OutputStream açın. Sistem avtomatik olaraq yeni faylı indeksləşdirir.
MediaStore media bazası vasitəsilə cihazın bütün media fayllarına proqram girişi təmin edir. Storage Access Framework fayl seçimi üçün sistem dialoqu açır və URI qaytarır — istifadəçi konkret fayl və ya qovluq seçir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun