MediaStore API: co to je, možnosti a práce se sdílenými mediálními soubory

Autor: IT Sectr Publikováno: 2026-07-10 Doba čtení: 7 min

MediaStore API — je rozhraní Androidu pro přístup ke sdíleným mediálním souborům zařízení: obrázkům, videům, audiu a dokumentům. Na rozdíl od přímého přístupu k souborům MediaStore pracuje prostřednictvím centralizované mediální databáze a poskytovatele obsahu. Podle Android Developers Documentation (2025) se od Androidu 10 API stalo hlavním mechanismem práce s médii namísto zastaralého READ_EXTERNAL_STORAGE. Vývojáři používají MediaStore v galeriích, hudebních přehrávačích, fotoaparátech a správcích souborů.

Hlavní body

  • MediaStore — systémový poskytovatel obsahu Androidu pro přístup ke sdíleným mediálním souborům zařízení.
  • Mediální databáze centralizovaně indexuje všechny obrázky, videa a audio na zařízení.
  • Android 10 učinil MediaStore jediným způsobem přístupu ke sdíleným mediálním souborům.
  • Uri odkazy nahrazují přímé cesty k souborům a poskytují bezpečný přístup.
  • Oprávnění se požadují podle typů médií: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO.

Co je MediaStore API?

MediaStore API — je systémový poskytovatel obsahu na platformě Android, určený k indexování, ukládání a poskytování přístupu k mediálním souborům zařízení. API je součástí Android SDK a je k dispozici od API Level 1.

MediaStore pracuje prostřednictvím jednotné mediální databáze, která automaticky skenuje zařízení a shromažďuje metadata všech mediálních souborů. Databáze je aktualizována systémem při přidávání, úpravě nebo mazání souborů, takže aplikace vždy dostávají aktuální informace bez ručního skenování.

Hlavní tabulky MediaStore: Images (obrázky), Video (videa), Audio (audio) a Files (obecné soubory). Každá tabulka obsahuje sloupce s metadaty: název, datum vytvoření, velikost, MIME typ, GPS souřadnice a další atributy.

Vývoj MediaStore ve verzích Androidu

Před Androidem 10 vývojáři používali READ_EXTERNAL_STORAGE pro přístup ke všem souborům zařízení. Android 10 (API 29) zavedl Scoped Storage: aplikace získaly přístup pouze ke svým souborům a přes MediaStore. Android 11 zpřísnil politiku a zcela zablokoval přímou cestu ke sdíleným adresářům.

Od Androidu 13 (API 33) Google nahradil READ_EXTERNAL_STORAGE granulárními oprávněními: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO a READ_MEDIA_AUDIO. To umožňuje uživateli poskytnout přístup pouze k určitým typům médií bez odhalení celého úložiště.

Jak MediaStore funguje: architektura a mediální databáze

MediaStore je postaven na architektuře poskytovatele obsahu: každá aplikace k němu přistupuje přes ContentResolver a Uri. Systémový skener médií — MediaScannerConnection — automaticky indexuje všechny soubory na zařízení při spuštění, připojení USB nebo restartu.

Mediální databáze je uložena v systémové databázi a obsahuje záznamy pro každý mediální soubor. Sloupce se liší pro různé typy: obrázky mají ORIENTATION a DATE_TAKEN, videa — DURATION, audio — ARTIST a ALBUM. Vývojáři mohou provádět SQL-podobné dotazy přes query s projection a selection pro filtrování.

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 a jejich význam

Každý mediální soubor je identifikován Content URI ve tvaru content://media/external/images/media/1234. Externí URI (external) ukazuje na sdílené úložiště, interní (internal) — na systémové mediální soubory. Použití URI místo cest k souborům — klíčová výhoda MediaStore: aplikace nevyžaduje přístup k souborovému systému a pracuje přes bezpečného poskytovatele obsahu.

Typy mediálních souborů v MediaStore

MediaStore podporuje čtyři hlavní typy médií, každý s vlastní tabulkou a sadou metadat. Vývojáři vybírají příslušnou tabulku v závislosti na typu obsahu, se kterým aplikace pracuje.

  • MediaStore.Images — fotografie, snímky obrazovky a kresby. Sloupce: BUCKET_DISPLAY_NAME, IS_PRIVATE, LATITUDE, LONGITUDE.
  • MediaStore.Video — videozáznamy a filmy. Sloupce: DURATION, RESOLUTION, IS_DRM.
  • MediaStore.Audio — hudební skladby a zvukové soubory. Sloupce: ARTIST, ALBUM, COMPOSER, TRACK.
  • MediaStore.Files — dokumenty a ostatní soubory. K dispozici od Androidu 10 pro obecný přístup.

Kromě standardních sloupců každá tabulka obsahuje systémová pole: _ID, DATA (zastaralé), SIZE, MIME_TYPE, DATE_ADDED, DATE_MODIFIED. Od verze Android 10 je pole DATA označeno jako deprecated a vývojáři by měli pracovat přes otevření InputStream podle URI.

Oprávnění pro práci s MediaStore

MediaStore vyžaduje explicitní oprávnění, která se liší v závislosti na verzi Androidu. Před Androidem 13 se používalo jednotné oprávnění READ_EXTERNAL_STORAGE. Od Androidu 13 (API 33) Google zavedl granulární oprávnění pro každý typ médií.

Typ médiíOprávnění (API 33+)Staré (API 29-32)
ObrázkyREAD_MEDIA_IMAGESREAD_EXTERNAL_STORAGE
VideoREAD_MEDIA_VIDEOREAD_EXTERNAL_STORAGE
AudioREAD_MEDIA_AUDIOREAD_EXTERNAL_STORAGE
ZápisWRITE_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE

Zápis do MediaStore také vyžaduje WRITE_EXTERNAL_STORAGE pro Android 9 a nižší. Od Androidu 10 může aplikace zapisovat vlastní soubory do MediaStore bez dalších oprávnění — systém automaticky poskytuje přístup při vkládání záznamu přes ContentResolver.insert.

Žádost o oprávnění za běhu

Oprávnění MediaStore se požadují prostřednictvím standardního mechanismu ActivityResultContracts.RequestMultiplePermissions. Uživatel může žádost odmítnout a aplikace by měla tento scénář správně zpracovat. Doporučuje se kontrolovat existenci oprávnění přes ContextCompat.checkSelfPermission před každým přístupem k MediaStore.

Příklady kódu: čtení a zápis přes MediaStore

MediaStore umožňuje nejen čtení, ale také zápis mediálních souborů. Pro zápis obrázku nebo videa vývojář použije ContentResolver.insert a otevře OutputStream na vráceném URI. Systém automaticky přidá soubor do mediální databáze a indexuje jej.

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 ->
        // zapsat bajty do streamu
    }
}

Odstranění mediálních souborů přes MediaStore

Odstranění se provádí přes ContentResolver.delete s uvedením URI souboru. Systém kontroluje přístupová práva: pokud soubor patří aktuální aplikaci, odstranění proběhne bez dalších oprávnění. Pro soubory jiných aplikací na Android 10+ je vyžadováno potvrzení uživatele prostřednictvím systémového dialogu.

MediaStore vs přímý přístup k souborům

MediaStore API se zásadně liší od přímého přístupu k souborům přes File API. Místo cest k souborům se používají Content URI a místo operací se soubory — metody ContentResolver. To poskytuje tři klíčové výhody: bezpečnost, automatické indexování a jednotné rozhraní.

Přímý přístup k souborům je omezen na Android 10+ pro sdílené adresáře. MediaStore zůstává jediným způsobem čtení médií z Pictures, DCIM, Movies, Music a Download. Pro vlastní soubory aplikace (app-specific storage) přímý přístup zůstává — to jsou složky v Android/data a Android/media.

Volba mezi MediaStore a přímým přístupem závisí na typu obsahu. MediaStore je povinný pro sdílené mediální soubory přístupné jiným aplikacím. Přímé File API je vhodné pro interní soubory aplikace a mezipaměť. Storage Access Framework se používá pro výběr libovolných dokumentů prostřednictvím systémového výběru.

Často kladené otázky

Co je MediaStore API v Androidu?

MediaStore API — je systémový poskytovatel obsahu Androidu pro přístup k mediálním souborům zařízení: obrázkům, videím, audiu a dokumentům. API poskytuje jednotné rozhraní přes ContentResolver a mediální databázi, která automaticky indexuje všechny soubory.

Jaké typy médií MediaStore podporuje?

MediaStore podporuje Images (obrázky), Video (videa), Audio (audio) a Files (dokumenty). Každý typ má samostatnou tabulku s vlastní sadou metadat: obrázky mají ORIENTATION, videa — DURATION, audio — ARTIST.

Jaká oprávnění jsou potřeba pro MediaStore na Android 13?

Na Android 13+ se používají granulární oprávnění: READ_MEDIA_IMAGES pro obrázky, READ_MEDIA_VIDEO pro video a READ_MEDIA_AUDIO pro audio. Uživatel může poskytnout přístup pouze k určitým typům médií.

Jak zapsat soubor přes MediaStore?

Pro zápis vytvořte ContentValues s názvem a MIME typem, zavolejte ContentResolver.insert pro získání URI, poté otevřete OutputStream přes ContentResolver.openOutputStream. Systém automaticky indexuje nový soubor.

Čím se liší MediaStore od Storage Access Framework?

MediaStore poskytuje programový přístup ke všem mediálním souborům zařízení přes mediální databázi. Storage Access Framework otevře systémový dialog pro výběr souboru a vrátí URI — uživatel vybere konkrétní soubor nebo složku.

Shrnutí

  • MediaStore API — hlavní mechanismus přístupu k mediálním souborům Androidu, pracující přes poskytovatele obsahu a mediální databázi.
  • Mediální databáze automaticky indexuje obrázky, videa, audio a dokumenty a poskytuje přístup k metadatům přes ContentResolver.
  • Android 10 učinil MediaStore jediným způsobem přístupu ke sdíleným mediálním souborům, čímž omezil přímý přístup k souborům.
  • Android 13 zavedl granulární oprávnění READ_MEDIA_IMAGES, READ_MEDIA_VIDEO a READ_MEDIA_AUDIO místo jednotného READ_EXTERNAL_STORAGE.
  • Content URI nahrazují cesty k souborům a poskytují bezpečný přístup bez root práv k souborům jiných aplikací.
  • Zápis přes MediaStore se provádí přes ContentResolver.insert a openOutputStream s automatickým indexováním v mediální databázi.
  • Výběr mezi MediaStore a SAF závisí na úkolu: MediaStore — pro dávkovou práci s médii, SAF — pro výběr jednotlivých souborů uživatelem.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také