MediaStore API: mi ez, lehetőségek és munka a közös médiafájlokkal

Szerző: IT Sectr Megjelenés: 2026-07-10 Olvasási idő: 7 perc

MediaStore API — az Android interfésze az eszköz közös médiafájljaihoz: képekhez, videókhoz, audiókhoz és dokumentumokhoz való hozzáféréshez. Ellentétben a közvetlen fájleléréssel, a MediaStore egy központosított médiaadatbázison és tartalomszolgáltatón keresztül működik. Az Android Developers Documentation (2025) szerint az Android 10-től kezdve az API a média kezelésének fő mechanizmusává vált az elavult READ_EXTERNAL_STORAGE helyett. A fejlesztők a MediaStore-t galériákban, zenelejátszókban, kamerákban és fájlkezelőkben használják.

Főbb pontok

  • MediaStore — az Android rendszer tartalomszolgáltatója az eszköz közös médiafájljaihoz való hozzáféréshez.
  • Médiaadatbázis központilag indexeli az összes képet, videót és audiót az eszközön.
  • Android 10 a MediaStore-t tette a közös médiafájlok elérésének egyetlen módjává.
  • Uri-hivatkozások felváltják a közvetlen fájlútvonalakat, biztonságos hozzáférést biztosítva.
  • Engedélyek médiatípusonként kérhetők: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO.

Mi a MediaStore API?

MediaStore API — egy rendszer tartalomszolgáltató az Android platformon, amely az eszköz médiafájljainak indexelésére, tárolására és hozzáférés biztosítására szolgál. Az API az Android SDK része, és az API Level 1-től elérhető.

A MediaStore egy egységes médiaadatbázison keresztül működik, amely automatikusan beolvassa az eszközt és összegyűjti az összes médiafájl metaadatait. Az adatbázis a rendszer által frissül fájlok hozzáadásakor, módosításakor vagy törlésekor, így az alkalmazások mindig naprakész információkat kapnak kézi beolvasás nélkül.

A MediaStore fő táblái: Images (képek), Video (videók), Audio (audiók) és Files (általános fájlok). Minden tábla metaadatokat tartalmazó oszlopokkal rendelkezik: név, létrehozás dátuma, méret, MIME-típus, GPS-koordináták és egyéb attribútumok.

A MediaStore fejlődése az Android verziókban

Android 10 előtt a fejlesztők a READ_EXTERNAL_STORAGE-t használták az eszköz összes fájljának eléréséhez. Android 10 (API 29) bevezette a Scoped Storage-t: az alkalmazások csak a saját fájljaikhoz és a MediaStore-on keresztül fértek hozzá. Az Android 11 szigorította a politikát, teljesen blokkolva a közvetlen utat a megosztott könyvtárakhoz.

Android 13-tól (API 33) kezdve a Google a READ_EXTERNAL_STORAGE-t granuláris engedélyekkel váltotta fel: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO és READ_MEDIA_AUDIO. Ez lehetővé teszi a felhasználó számára, hogy csak bizonyos médiatípusokhoz adjon hozzáférést a teljes tárhely felfedése nélkül.

Hogyan működik a MediaStore: architektúra és médiaadatbázis

MediaStore a tartalomszolgáltató architektúrájára épül: minden alkalmazás ContentResolver-en és Uri-n keresztül fér hozzá. A rendszer médiabeolvasója — MediaScannerConnection — automatikusan indexeli az eszköz összes fájlját indításkor, USB-csatlakoztatáskor vagy újraindításkor.

A médiaadatbázis a rendszeradatbázisban tárolódik, és minden médiafájlhoz rekordokat tartalmaz. Az oszlopok típusonként eltérőek: a képek ORIENTATION és DATE_TAKEN, a videók — DURATION, az audiók — ARTIST és ALBUM mezőkkel rendelkeznek. A fejlesztők SQL-szerű lekérdezéseket hajthatnak végre a query-n keresztül projection és selection segítségével a szűréshez.

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-k és jelentőségük

Minden médiafájlt egy Content URI azonosít, amelynek formája content://media/external/images/media/1234. A külső URI (external) a megosztott tárhelyre mutat, a belső (internal) — a rendszer médiafájljaira. Az URI használata fájlútvonalak helyett — a MediaStore kulcsfontosságú előnye: az alkalmazás nem igényel hozzáférést a fájlrendszerhez, és egy biztonságos tartalomszolgáltatón keresztül működik.

Médiafájlok típusai a MediaStore-ban

MediaStore négy fő médiatípust támogat, mindegyik külön táblával és metaadatkészlettel. A fejlesztők az alkalmazás által használt tartalom típusától függően választják ki a megfelelő táblát.

  • MediaStore.Images — fényképek, képernyőképek és rajzok. Oszlopok: BUCKET_DISPLAY_NAME, IS_PRIVATE, LATITUDE, LONGITUDE.
  • MediaStore.Video — videófelvételek és filmek. Oszlopok: DURATION, RESOLUTION, IS_DRM.
  • MediaStore.Audio — zeneszámok és hangfájlok. Oszlopok: ARTIST, ALBUM, COMPOSER, TRACK.
  • MediaStore.Files — dokumentumok és egyéb fájlok. Android 10-től érhető el általános hozzáféréshez.

A szabványos oszlopok mellett minden tábla tartalmaz rendszermezőket: _ID, DATA (elavult), SIZE, MIME_TYPE, DATE_ADDED, DATE_MODIFIED. Android 10-től a DATA mező deprecated jelöléssel rendelkezik, és a fejlesztőknek az URI alapú InputStream megnyitásán keresztül kell dolgozniuk.

Engedélyek a MediaStore-hoz

MediaStore kifejezett engedélyeket igényel, amelyek az Android verziójától függően eltérőek. Android 13 előtt az egységes READ_EXTERNAL_STORAGE engedélyt használták. Android 13-tól (API 33) kezdve a Google granuláris engedélyeket vezetett be minden médiatípushoz.

MédiatípusEngedély (API 33+)Régi (API 29-32)
KépekREAD_MEDIA_IMAGESREAD_EXTERNAL_STORAGE
VideóREAD_MEDIA_VIDEOREAD_EXTERNAL_STORAGE
AudióREAD_MEDIA_AUDIOREAD_EXTERNAL_STORAGE
ÍrásWRITE_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE

A MediaStore-ba íráshoz is WRITE_EXTERNAL_STORAGE szükséges Android 9 és alacsonyabb verziók esetén. Android 10-től kezdve az alkalmazás további engedélyek nélkül írhatja saját fájljait a MediaStore-ba — a rendszer automatikusan hozzáférést biztosít a rekord ContentResolver.insert-en keresztüli beszúrásakor.

Engedélyek kérése futásidőben

A MediaStore engedélyek a szabványos ActivityResultContracts.RequestMultiplePermissions mechanizmuson keresztül kérhetők. A felhasználó elutasíthatja a kérést, és az alkalmazásnak megfelelően kell kezelnie ezt a forgatókönyvet. Javasolt az engedély meglétének ellenőrzése ContextCompat.checkSelfPermission segítségével minden MediaStore-hozzáférés előtt.

Kódpéldák: olvasás és írás a MediaStore-on keresztül

MediaStore nemcsak olvasást, hanem médiafájlok írását is lehetővé teszi. Kép vagy videó írásához a fejlesztő ContentResolver.insert-t használ, és OutputStream-et nyit a visszakapott URI-n. A rendszer automatikusan hozzáadja a fájlt a médiaadatbázishoz és indexeli.

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 ->
        // bájtok írása a streamba
    }
}

Médiafájlok törlése a MediaStore-on keresztül

A törlés ContentResolver.delete segítségével történik a fájl URI-jának megadásával. A rendszer ellenőrzi a hozzáférési jogokat: ha a fájl az aktuális alkalmazás tulajdonában van, a törlés további engedélyek nélkül megtörténik. Más alkalmazások fájljaihoz Android 10+ esetén a felhasználó megerősítése szükséges egy rendszerpárbeszédablakon keresztül.

MediaStore vs közvetlen fájlelérés

MediaStore API alapvetően különbözik a File API-n keresztüli közvetlen fájleléréstől. Fájlútvonalak helyett Content URI-k, fájlműveletek helyett — ContentResolver metódusok használatosak. Ez három kulcsfontosságú előnyt nyújt: biztonság, automatikus indexelés és egységes interfész.

A közvetlen fájlelérés korlátozott Android 10+ rendszeren a megosztott könyvtárak esetében. A MediaStore marad az egyetlen mód a média olvasására a Pictures, DCIM, Movies, Music és Download mappákból. Az alkalmazás saját fájljaihoz (app-specific storage) a közvetlen hozzáférés megmarad — ezek az Android/data és Android/media mappák.

A MediaStore és a közvetlen hozzáférés közötti választás a tartalom típusától függ. MediaStore kötelező a más alkalmazások számára elérhető közös médiafájlok esetén. A közvetlen File API az alkalmazás belső fájljaihoz és gyorsítótárához alkalmas. A Storage Access Framework tetszőleges dokumentumok rendszerválasztón keresztüli kiválasztására szolgál.

Gyakran Ismételt Kérdések

Mi a MediaStore API Androidban?

MediaStore API — az Android rendszer tartalomszolgáltatója az eszköz médiafájljaihoz: képekhez, videókhoz, audiókhoz és dokumentumokhoz való hozzáféréshez. Az API egységes interfészt biztosít a ContentResolver-en és a médiaadatbázison keresztül, amely automatikusan indexeli az összes fájlt.

Milyen médiatípusokat támogat a MediaStore?

A MediaStore támogatja a Images (képek), Video (videók), Audio (audiók) és Files (dokumentumok) típusokat. Minden típus külön táblával rendelkezik saját metaadatkészlettel: a képek ORIENTATION, a videók — DURATION, az audiók — ARTIST mezőkkel.

Milyen engedélyek szükségesek a MediaStore-hoz Android 13-on?

Android 13+ rendszeren granuláris engedélyek használatosak: READ_MEDIA_IMAGES a képekhez, READ_MEDIA_VIDEO a videókhoz és READ_MEDIA_AUDIO az audiókhoz. A felhasználó csak bizonyos médiatípusokhoz adhat hozzáférést.

Hogyan írhatok fájlt a MediaStore-on keresztül?

Az íráshoz hozzon létre egy ContentValues objektumot névvel és MIME-típussal, hívja meg a ContentResolver.insert metódust az URI megszerzéséhez, majd nyissa meg az OutputStream-et a ContentResolver.openOutputStream segítségével. A rendszer automatikusan indexeli az új fájlt.

Miben különbözik a MediaStore a Storage Access Framework-től?

MediaStore programozott hozzáférést biztosít az eszköz összes médiafájljához a médiaadatbázison keresztül. Storage Access Framework megnyit egy rendszerpárbeszédablakot a fájl kiválasztásához és visszaad egy URI-t — a felhasználó kiválaszt egy adott fájlt vagy mappát.

Összefoglalás

  • MediaStore API — az Android médiafájlok elérésének fő mechanizmusa, amely tartalomszolgáltatón és médiaadatbázison keresztül működik.
  • Médiaadatbázis automatikusan indexeli a képeket, videókat, audiókat és dokumentumokat, hozzáférést biztosítva a metaadatokhoz ContentResolver-en keresztül.
  • Android 10 a MediaStore-t tette a közös médiafájlok elérésének egyetlen módjává, korlátozva a közvetlen fájlelérést.
  • Android 13 bevezette a granuláris READ_MEDIA_IMAGES, READ_MEDIA_VIDEO és READ_MEDIA_AUDIO engedélyeket az egységes READ_EXTERNAL_STORAGE helyett.
  • Content URI felváltja a fájlútvonalakat, biztonságos hozzáférést biztosítva root jogosultságok nélkül más alkalmazások fájljaihoz.
  • Írás a MediaStore-on keresztül ContentResolver.insert és openOutputStream segítségével történik, automatikus indexeléssel a médiaadatbázisban.
  • Választás a MediaStore és a SAF között a feladattól függ: MediaStore — kötegelt médiafeldolgozáshoz, SAF — egyedi fájlok kiválasztásához a felhasználó által.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is