MediaStore API — adalah antarmuka Android untuk mengakses file media bersama perangkat: gambar, video, audio, dan dokumen. Berbeda dengan akses file langsung, MediaStore bekerja melalui basis data media terpusat dan penyedia konten. Menurut Android Developers Documentation (2025), mulai Android 10 API menjadi mekanisme utama bekerja dengan media menggantikan READ_EXTERNAL_STORAGE yang sudah usang. Pengembang menggunakan MediaStore di galeri, pemutar musik, kamera, dan pengelola file.
Poin Penting
MediaStore API — adalah penyedia konten sistem pada platform Android, yang dirancang untuk mengindeks, menyimpan, dan menyediakan akses ke file media perangkat. API merupakan bagian dari Android SDK dan tersedia sejak API Level 1.
MediaStore bekerja melalui basis data media tunggal yang secara otomatis memindai perangkat dan mengumpulkan metadata semua file media. Basis data diperbarui oleh sistem saat file ditambahkan, diubah, atau dihapus, sehingga aplikasi selalu mendapatkan informasi terkini tanpa pemindaian manual.
Tabel utama MediaStore: Images (gambar), Video (video), Audio (audio), dan Files (file umum). Setiap tabel berisi kolom dengan metadata: nama, tanggal pembuatan, ukuran, tipe MIME, koordinat GPS, dan atribut lainnya.
Sebelum Android 10, pengembang menggunakan READ_EXTERNAL_STORAGE untuk mengakses semua file perangkat. Android 10 (API 29) memperkenalkan Scoped Storage: aplikasi hanya mendapatkan akses ke file mereka sendiri dan melalui MediaStore. Android 11 memperketat kebijakan, sepenuhnya memblokir jalur langsung ke direktori bersama.
Mulai Android 13 (API 33), Google mengganti READ_EXTERNAL_STORAGE dengan izin granular: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, dan READ_MEDIA_AUDIO. Ini memungkinkan pengguna memberikan akses hanya ke jenis media tertentu tanpa mengungkapkan seluruh penyimpanan.
MediaStore dibangun di atas arsitektur penyedia konten: setiap aplikasi mengaksesnya melalui ContentResolver dan Uri. Pemindai media sistem — MediaScannerConnection — secara otomatis mengindeks semua file di perangkat saat boot, koneksi USB, atau restart.
Basis data media disimpan dalam basis data sistem dan berisi catatan untuk setiap file media. Kolom berbeda untuk tipe yang berbeda: gambar memiliki ORIENTATION dan DATE_TAKEN, video — DURATION, audio — ARTIST dan ALBUM. Pengembang dapat menjalankan kueri mirip SQL melalui query dengan projection dan selection untuk memfilter.
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))
}
}
Setiap file media diidentifikasi oleh Content URI berbentuk content://media/external/images/media/1234. URI eksternal (external) mengacu pada penyimpanan bersama, internal — pada file media sistem. Menggunakan URI alih-alih jalur file — keunggulan utama MediaStore: aplikasi tidak memerlukan akses ke sistem file dan bekerja melalui penyedia konten yang aman.
MediaStore mendukung empat jenis media utama, masing-masing dengan tabel terpisah dan set metadata. Pengembang memilih tabel yang sesuai tergantung pada jenis konten yang digunakan aplikasi.
Selain kolom standar, setiap tabel berisi bidang sistem: _ID, DATA (usang), SIZE, MIME_TYPE, DATE_ADDED, DATE_MODIFIED. Sejak Android 10, bidang DATA ditandai sebagai deprecated, dan pengembang harus bekerja melalui pembukaan InputStream berdasarkan URI.
MediaStore memerlukan izin eksplisit yang berbeda tergantung pada versi Android. Sebelum Android 13, izin tunggal READ_EXTERNAL_STORAGE digunakan. Mulai Android 13 (API 33), Google memperkenalkan izin granular untuk setiap jenis media.
| Jenis media | Izin (API 33+) | Lama (API 29-32) |
|---|---|---|
| Gambar | READ_MEDIA_IMAGES | READ_EXTERNAL_STORAGE |
| Video | READ_MEDIA_VIDEO | READ_EXTERNAL_STORAGE |
| Audio | READ_MEDIA_AUDIO | READ_EXTERNAL_STORAGE |
| Menulis | WRITE_EXTERNAL_STORAGE | WRITE_EXTERNAL_STORAGE |
Menulis ke MediaStore juga memerlukan WRITE_EXTERNAL_STORAGE untuk Android 9 dan sebelumnya. Mulai Android 10, aplikasi dapat menulis file sendiri ke MediaStore tanpa izin tambahan — sistem secara otomatis memberikan akses saat menyisipkan catatan melalui ContentResolver.insert.
Izin MediaStore diminta melalui mekanisme standar ActivityResultContracts.RequestMultiplePermissions. Pengguna dapat menolak permintaan, dan aplikasi harus menangani skenario ini dengan benar. Disarankan untuk memeriksa keberadaan izin melalui ContextCompat.checkSelfPermission sebelum setiap akses ke MediaStore.
MediaStore tidak hanya memungkinkan membaca, tetapi juga menulis file media. Untuk menulis gambar atau video, pengembang menggunakan ContentResolver.insert dan membuka OutputStream pada URI yang dikembalikan. Sistem secara otomatis menambahkan file ke basis data media dan mengindeksnya.
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 ->
// tulis byte ke aliran
}
}
Penghapusan dilakukan melalui ContentResolver.delete dengan menentukan URI file. Sistem memeriksa hak akses: jika file milik aplikasi saat ini, penghapusan terjadi tanpa izin tambahan. Untuk file aplikasi lain di Android 10+, diperlukan konfirmasi pengguna melalui dialog sistem.
MediaStore API pada dasarnya berbeda dari akses file langsung melalui File API. Alih-alih jalur file, digunakan Content URI, dan alih-alih operasi file — metode ContentResolver. Ini memberikan tiga keunggulan utama: keamanan, pengindeksan otomatis, dan antarmuka terpadu.
Akses file langsung dibatasi di Android 10+ untuk direktori bersama. MediaStore tetap menjadi satu-satunya cara membaca media dari Pictures, DCIM, Movies, Music, dan Download. Untuk file milik aplikasi sendiri (app-specific storage), akses langsung tetap tersedia — ini adalah folder di Android/data dan Android/media.
Pilihan antara MediaStore dan akses langsung tergantung pada jenis konten. MediaStore wajib untuk file media bersama yang dapat diakses aplikasi lain. File API langsung cocok untuk file internal aplikasi dan cache. Storage Access Framework digunakan untuk memilih dokumen arbitrer melalui pemilih sistem.
Pertanyaan yang Sering Diajukan
MediaStore API — adalah penyedia konten sistem Android untuk akses ke file media perangkat: gambar, video, audio, dan dokumen. API menyediakan antarmuka terpadu melalui ContentResolver dan basis data media yang secara otomatis mengindeks semua file.
MediaStore mendukung Images (gambar), Video (video), Audio (audio), dan Files (dokumen). Setiap jenis memiliki tabel terpisah dengan set metadata sendiri: gambar memiliki ORIENTATION, video — DURATION, audio — ARTIST.
Di Android 13+, izin granular digunakan: READ_MEDIA_IMAGES untuk gambar, READ_MEDIA_VIDEO untuk video, dan READ_MEDIA_AUDIO untuk audio. Pengguna dapat memberikan akses hanya ke jenis media tertentu.
Untuk menulis, buat ContentValues dengan nama dan tipe MIME, panggil ContentResolver.insert untuk mendapatkan URI, lalu buka OutputStream melalui ContentResolver.openOutputStream. Sistem secara otomatis mengindeks file baru.
MediaStore menyediakan akses terprogram ke semua file media perangkat melalui basis data media. Storage Access Framework membuka dialog sistem pemilihan file dan mengembalikan URI — pengguna memilih file atau folder tertentu.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga