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 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.
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.
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.
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))
}
}
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.
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.
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.
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 media | Pahintulot (API 33+) | Luma (API 29-32) |
|---|---|---|
| Mga larawan | READ_MEDIA_IMAGES | READ_EXTERNAL_STORAGE |
| Video | READ_MEDIA_VIDEO | READ_EXTERNAL_STORAGE |
| Audio | READ_MEDIA_AUDIO | READ_EXTERNAL_STORAGE |
| Pagsulat | WRITE_EXTERNAL_STORAGE | WRITE_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.
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.
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.
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
}
}
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 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
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.
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.
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.
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.
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
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.
Basahin din