MediaStore API: apa itu, kemampuan dan bekerja dengan file media bersama

Penulis: IT Sectr Diterbitkan: 2026-07-10 Waktu membaca: 7 mnt

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 — penyedia konten sistem Android untuk akses ke file media bersama perangkat.
  • Basis data media mengindeks semua gambar, video, dan audio di perangkat secara terpusat.
  • Android 10 menjadikan MediaStore satu-satunya cara untuk mengakses file media bersama.
  • Tautan Uri menggantikan jalur file langsung, menyediakan akses aman.
  • Izin diminta berdasarkan jenis media: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO.

Apa itu MediaStore API?

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.

Evolusi MediaStore di versi Android

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.

Cara kerja MediaStore: arsitektur dan basis data media

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.

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 dan artinya

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.

Jenis file media di MediaStore

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.

  • MediaStore.Images — foto, tangkapan layar, dan gambar. Kolom: BUCKET_DISPLAY_NAME, IS_PRIVATE, LATITUDE, LONGITUDE.
  • MediaStore.Video — rekaman video dan film. Kolom: DURATION, RESOLUTION, IS_DRM.
  • MediaStore.Audio — trek musik dan file suara. Kolom: ARTIST, ALBUM, COMPOSER, TRACK.
  • MediaStore.Files — dokumen dan file lainnya. Tersedia sejak Android 10 untuk akses umum.

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.

Izin untuk bekerja dengan MediaStore

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 mediaIzin (API 33+)Lama (API 29-32)
GambarREAD_MEDIA_IMAGESREAD_EXTERNAL_STORAGE
VideoREAD_MEDIA_VIDEOREAD_EXTERNAL_STORAGE
AudioREAD_MEDIA_AUDIOREAD_EXTERNAL_STORAGE
MenulisWRITE_EXTERNAL_STORAGEWRITE_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.

Meminta izin saat runtime

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.

Contoh kode: membaca dan menulis melalui 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.

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 ->
        // tulis byte ke aliran
    }
}

Menghapus file media melalui MediaStore

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 vs akses file langsung

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

Apa itu MediaStore API di Android?

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.

Jenis media apa yang didukung MediaStore?

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.

Izin apa yang diperlukan untuk MediaStore di Android 13?

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.

Bagaimana cara menulis file melalui MediaStore?

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.

Apa perbedaan MediaStore dengan Storage Access Framework?

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

  • MediaStore API — mekanisme utama akses ke file media Android, bekerja melalui penyedia konten dan basis data media.
  • Basis data media secara otomatis mengindeks gambar, video, audio, dan dokumen, menyediakan akses ke metadata melalui ContentResolver.
  • Android 10 menjadikan MediaStore satu-satunya cara mengakses file media bersama, membatasi akses file langsung.
  • Android 13 memperkenalkan izin granular READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, dan READ_MEDIA_AUDIO menggantikan READ_EXTERNAL_STORAGE tunggal.
  • Content URI menggantikan jalur file, menyediakan akses aman tanpa hak root ke file aplikasi lain.
  • Menulis melalui MediaStore dilakukan melalui ContentResolver.insert dan openOutputStream dengan pengindeksan otomatis di basis data media.
  • Pilihan antara MediaStore dan SAF tergantung pada tugas: MediaStore — untuk kerja batch dengan media, SAF — untuk pemilihan file individual oleh pengguna.

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.

Diskusikan proyek

Baca juga