MediaStore API: ano ito, mga kakayahan at paggawa sa mga shared media file

May-akda: IT Sectr Nai-publish: 2026-07-10 Oras ng pagbabasa: 7 min

MediaStore API — ay ang Android interface para sa pag-access sa mga shared media file ng device: mga larawan, video, audio at dokumento. Hindi tulad ng direktang pag-access sa file, ang MediaStore ay gumagana sa pamamagitan ng isang sentralisadong media database at content provider. Ayon sa Android Developers Documentation (2025), simula sa Android 10 ang API ay naging pangunahing mekanismo para sa pagtatrabaho sa media sa halip ng lumang READ_EXTERNAL_STORAGE. Ginagamit ng mga developer ang MediaStore sa mga gallery, music player, camera at file manager.

Mga Pangunahing Punto

  • MediaStore — ang Android system content provider para sa pag-access sa mga shared media file ng device.
  • Media database sentralisadong ini-index ang lahat ng larawan, video at audio sa device.
  • Android 10 ginawang MediaStore ang tanging paraan para ma-access ang mga shared media file.
  • Mga Uri- link pinapalitan ang direktang mga path ng file, na nagbibigay ng ligtas na access.
  • Mga pahintulot hinihiling batay sa uri ng media: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO.

Ano ang MediaStore API?

MediaStore API — ay isang system content provider sa Android platform, na idinisenyo para sa pag-index, pag-iimbak at pagbibigay ng access sa mga media file ng device. Ang API ay bahagi ng Android SDK at magagamit mula sa API Level 1.

Ang MediaStore ay gumagana sa pamamagitan ng isang pinag-isang media database na awtomatikong nag-scan sa device at nangongolekta ng metadata ng lahat ng media file. Ang database ay ina-update ng system kapag nagdagdag, nagbago o nagtanggal ng mga file, kaya ang mga application ay palaging nakakatanggap ng napapanahong impormasyon nang walang manu-manong pag-scan.

Ang mga pangunahing talahanayan ng MediaStore: Images (mga larawan), Video (video), Audio (audio) at Files (pangkalahatang mga file). Ang bawat talahanayan ay naglalaman ng mga column na may metadata: pangalan, petsa ng paggawa, laki, uri ng MIME, GPS coordinate at iba pang mga katangian.

Ebolusyon ng MediaStore sa mga bersyon ng Android

Bago ang Android 10, ginamit ng mga developer ang READ_EXTERNAL_STORAGE para ma-access ang lahat ng file ng device. Android 10 (API 29) ay nagpakilala ng Scoped Storage: ang mga application ay nakakuha ng access lamang sa kanilang sariling mga file at sa pamamagitan ng MediaStore. Pinaigting ng Android 11 ang patakaran, ganap na hinaharang ang direktang path sa mga shared directory.

Simula sa Android 13 (API 33), pinalitan ng Google ang READ_EXTERNAL_STORAGE ng mga granular na pahintulot: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO at READ_MEDIA_AUDIO. Ito ay nagpapahintulot sa user na magbigay ng access lamang sa mga tiyak na uri ng media nang hindi ibinubunyag ang buong storage.

Paano gumagana ang MediaStore: arkitektura at media database

MediaStore ay binuo sa arkitektura ng content provider: bawat application ay pumupunta dito sa pamamagitan ng ContentResolver at Uri. Ang system media scanner — MediaScannerConnection — ay awtomatikong nag-i-index ng lahat ng file sa device sa pagsisimula, pagkonekta sa USB o pag-reboot.

Ang media database ay naka-imbak sa system database at naglalaman ng mga record para sa bawat media file. Ang mga column ay naiiba para sa iba't ibang uri: ang mga larawan ay may ORIENTATION at DATE_TAKEN, video — DURATION, audio — ARTIST at ALBUM. Ang mga developer ay maaaring magsagawa ng mga SQL-like query sa pamamagitan ng query na may projection at selection para sa pag-filter.

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 at ang kahalagahan nito

Ang bawat media file ay nakikilala sa pamamagitan ng Content URI na anyong content://media/external/images/media/1234. Ang external na URI (external) ay tumutukoy sa shared storage, internal (internal) — sa system media file. Ang paggamit ng URI sa halip na mga path ng file — pangunahing bentahe ng MediaStore: ang application ay hindi nangangailangan ng access sa file system at gumagana sa pamamagitan ng isang secure na content provider.

Mga uri ng media file sa MediaStore

MediaStore ay sumusuporta sa apat na pangunahing uri ng media, bawat isa ay may hiwalay na talahanayan at set ng metadata. Pinipili ng mga developer ang naaangkop na talahanayan depende sa uri ng nilalaman na ginagamit ng application.

  • MediaStore.Images — mga larawan, screenshot at drawing. Mga column: BUCKET_DISPLAY_NAME, IS_PRIVATE, LATITUDE, LONGITUDE.
  • MediaStore.Video — mga video recording at pelikula. Mga column: DURATION, RESOLUTION, IS_DRM.
  • MediaStore.Audio — mga music track at sound file. Mga column: ARTIST, ALBUM, COMPOSER, TRACK.
  • MediaStore.Files — mga dokumento at iba pang file. Magagamit mula sa Android 10 para sa pangkalahatang access.

Bukod sa mga standard na column, ang bawat talahanayan ay naglalaman ng system field: _ID, DATA (luma na), SIZE, MIME_TYPE, DATE_ADDED, DATE_MODIFIED. Mula sa Android 10, ang field na DATA ay minarkahan bilang deprecated, at ang mga developer ay dapat gumawa sa pamamagitan ng pagbubukas ng InputStream batay sa URI.

Mga pahintulot para sa paggawa sa MediaStore

MediaStore ay nangangailangan ng tahasang mga pahintulot na naiiba depende sa bersyon ng Android. Bago ang Android 13, ginamit ang solong pahintulot na READ_EXTERNAL_STORAGE. Simula sa Android 13 (API 33), ipinakilala ng Google ang mga granular na pahintulot para sa bawat uri ng media.

Uri ng mediaPahintulot (API 33+)Luma (API 29-32)
Mga larawanREAD_MEDIA_IMAGESREAD_EXTERNAL_STORAGE
VideoREAD_MEDIA_VIDEOREAD_EXTERNAL_STORAGE
AudioREAD_MEDIA_AUDIOREAD_EXTERNAL_STORAGE
PagsulatWRITE_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE

Ang pagsulat sa MediaStore ay nangangailangan din ng WRITE_EXTERNAL_STORAGE para sa Android 9 at mas mababa. Simula sa Android 10, ang application ay maaaring magsulat ng sarili nitong mga file sa MediaStore nang walang karagdagang pahintulot — ang system ay awtomatikong nagbibigay ng access kapag naglalagay ng record sa pamamagitan ng ContentResolver.insert.

Paghiling ng mga pahintulot sa runtime

Ang mga pahintulot ng MediaStore ay hinihiling sa pamamagitan ng standard na mekanismo na ActivityResultContracts.RequestMultiplePermissions. Maaaring tanggihan ng user ang kahilingan, at dapat na tamang pangasiwaan ng application ang sitwasyong ito. Inirerekomenda na suriin ang pagkakaroon ng pahintulot sa pamamagitan ng ContextCompat.checkSelfPermission bago ang bawat pag-access sa MediaStore.

Mga halimbawa ng code: pagbasa at pagsulat sa pamamagitan ng MediaStore

MediaStore ay hindi lamang nagpapahintulot ng pagbasa, kundi pati na rin pagsulat ng media file. Para sa pagsulat ng larawan o video, ginagamit ng developer ang ContentResolver.insert at binubuksan ang OutputStream sa ibinalik na URI. Awtomatikong idinadagdag ng system ang file sa media database at ini-index ito.

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 ->
        // magsulat ng bytes sa stream
    }
}

Pagbura ng media file sa pamamagitan ng MediaStore

Ang pagbura ay ginagawa sa pamamagitan ng ContentResolver.delete na may pagtukoy sa URI ng file. Sinusuri ng system ang mga karapatan sa pag-access: kung ang file ay pagmamay-ari ng kasalukuyang application, ang pagbura ay nagaganap nang walang karagdagang pahintulot. Para sa mga file ng iba pang application sa Android 10+, kinakailangan ang kumpirmasyon ng user sa pamamagitan ng system dialog.

MediaStore vs direktang pag-access sa file

MediaStore API ay pangunahing naiiba sa direktang pag-access sa file sa pamamagitan ng File API. Sa halip na mga path ng file, ginagamit ang Content URI, at sa halip na mga operasyon ng file — mga pamamaraan ng ContentResolver. Ito ay nagbibigay ng tatlong pangunahing bentahe: seguridad, awtomatikong pag-index at pinag-isang interface.

Ang direktang pag-access sa file ay limitado sa Android 10+ para sa mga shared directory. Ang MediaStore ay nananatiling tanging paraan ng pagbasa ng media mula sa Pictures, DCIM, Movies, Music at Download. Para sa sariling mga file ng application (app-specific storage), nananatili ang direktang access — ito ay mga folder sa Android/data at Android/media.

Ang pagpili sa pagitan ng MediaStore at direktang access ay depende sa uri ng nilalaman. MediaStore ay sapilitan para sa shared media file na accessible ng iba pang application. Ang direktang File API ay angkop para sa panloob na mga file ng application at cache. Ang Storage Access Framework ay ginagamit para sa pagpili ng arbitraryong mga dokumento sa pamamagitan ng system picker.

Mga Madalas Itanong

Ano ang MediaStore API sa Android?

MediaStore API — ay ang Android system content provider para sa pag-access sa media file ng device: mga larawan, video, audio at dokumento. Ang API ay nagbibigay ng pinag-isang interface sa pamamagitan ng ContentResolver at media database na awtomatikong nag-i-index ng lahat ng file.

Anong mga uri ng media ang sinusuportahan ng MediaStore?

Sinusuportahan ng MediaStore ang Images (mga larawan), Video (video), Audio (audio) at Files (mga dokumento). Ang bawat uri ay may hiwalay na talahanayan na may sariling set ng metadata: ang mga larawan ay may ORIENTATION, video — DURATION, audio — ARTIST.

Anong mga pahintulot ang kailangan para sa MediaStore sa Android 13?

Sa Android 13+, ginagamit ang mga granular na pahintulot: READ_MEDIA_IMAGES para sa mga larawan, READ_MEDIA_VIDEO para sa video at READ_MEDIA_AUDIO para sa audio. Maaaring magbigay ang user ng access lamang sa mga tiyak na uri ng media.

Paano magsulat ng file sa pamamagitan ng MediaStore?

Para magsulat, gumawa ng ContentValues na may pangalan at uri ng MIME, tawagan ang ContentResolver.insert para makakuha ng URI, pagkatapos ay buksan ang OutputStream sa pamamagitan ng ContentResolver.openOutputStream. Awtomatikong ini-index ng system ang bagong file.

Ano ang pagkakaiba ng MediaStore at Storage Access Framework?

MediaStore ay nagbibigay ng programmatic access sa lahat ng media file ng device sa pamamagitan ng media database. Storage Access Framework ay nagbubukas ng system dialog para sa pagpili ng file at nagbabalik ng URI — ang user ay pumipili ng tiyak na file o folder.

Buod

  • MediaStore API — pangunahing mekanismo ng pag-access sa mga media file ng Android, na gumagana sa pamamagitan ng content provider at media database.
  • Media database awtomatikong nag-i-index ng mga larawan, video, audio at dokumento, na nagbibigay ng access sa metadata sa pamamagitan ng ContentResolver.
  • Android 10 ginawang MediaStore ang tanging paraan ng pag-access sa shared media file, na nililimitahan ang direktang pag-access sa file.
  • Android 13 ay nagpakilala ng granular na pahintulot na READ_MEDIA_IMAGES, READ_MEDIA_VIDEO at READ_MEDIA_AUDIO sa halip ng solong READ_EXTERNAL_STORAGE.
  • Content URI ay pinapalitan ang mga path ng file, na nagbibigay ng ligtas na access nang walang root rights sa mga file ng iba pang application.
  • Pagsulat sa pamamagitan ng MediaStore ay ginagawa sa pamamagitan ng ContentResolver.insert at openOutputStream na may awtomatikong pag-index sa media database.
  • Pagpili sa pagitan ng MediaStore at SAF ay depende sa gawain: MediaStore — para sa batch work sa media, SAF — para sa pagpili ng indibidwal na mga file ng user.

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din