MediaStore API: qué es, capacidades y trabajo con archivos multimedia compartidos

Autor: IT Sectr Publicado: 2026-07-10 Tiempo de lectura: 7 min

MediaStore API es una interfaz de Android para acceder a los archivos multimedia compartidos del dispositivo: imágenes, videos, audio y documentos. A diferencia del acceso directo a archivos, MediaStore funciona a través de una base de datos multimedia centralizada y un proveedor de contenido. Según la documentación para desarrolladores de Android (2025), a partir de Android 10 la API se convirtió en el mecanismo principal para trabajar con medios, reemplazando el obsoleto READ_EXTERNAL_STORAGE. Los desarrolladores usan MediaStore en galerías, reproductores de música, cámaras y administradores de archivos.

Puntos clave

  • MediaStore es el proveedor de contenido del sistema Android para acceder a archivos multimedia compartidos del dispositivo.
  • Base de datos multimedia indexa centralmente todas las imágenes, videos y audio del dispositivo.
  • Android 10 convirtió a MediaStore en la única forma de acceder a archivos multimedia compartidos.
  • URI reemplazan las rutas de archivo directas, garantizando un acceso seguro.
  • Permisos se solicitan por tipo de medio: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO.

¿Qué es MediaStore API?

MediaStore API es un proveedor de contenido del sistema en la plataforma Android diseñado para indexar, almacenar y proporcionar acceso a los archivos multimedia del dispositivo. La API forma parte del SDK de Android y está disponible desde el nivel de API 1.

MediaStore funciona a través de una base de datos multimedia unificada que escanea automáticamente el dispositivo y recopila metadatos de todos los archivos multimedia. La base de datos se actualiza por el sistema cuando se añaden, modifican o eliminan archivos, por lo que las aplicaciones siempre reciben información actualizada sin escaneo manual.

Las tablas principales de MediaStore son: Images (imágenes), Video (videos), Audio (audio) y Files (archivos generales). Cada tabla contiene columnas con metadatos: nombre, fecha de creación, tamaño, tipo MIME, coordenadas GPS y otros atributos.

Evolución de MediaStore en las versiones de Android

Antes de Android 10, los desarrolladores usaban READ_EXTERNAL_STORAGE para acceder a todos los archivos del dispositivo. Android 10 (API 29) introdujo Scoped Storage: las aplicaciones solo podían acceder a sus propios archivos y a través de MediaStore. Android 11 endureció la política, bloqueando por completo la ruta directa a los directorios compartidos.

A partir de Android 13 (API 33), Google reemplazó READ_EXTERNAL_STORAGE con permisos granulares: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO y READ_MEDIA_AUDIO. Esto permite a los usuarios otorgar acceso solo a tipos específicos de medios sin exponer todo el almacenamiento.

Cómo funciona MediaStore: arquitectura y base de datos multimedia

MediaStore está construido sobre una arquitectura de proveedor de contenido: cada aplicación accede a él a través de ContentResolver y Uri. El escáner multimedia del sistema — MediaScannerConnection — indexa automáticamente todos los archivos del dispositivo durante el arranque, la conexión USB o el reinicio.

La base de datos multimedia se almacena en la base de datos del sistema y contiene registros para cada archivo multimedia. Las columnas difieren según el tipo: las imágenes tienen ORIENTATION y DATE_TAKEN, los videos tienen DURATION, los archivos de audio tienen ARTIST y ALBUM. Los desarrolladores pueden ejecutar consultas similares a SQL usando query con projection y selection para filtrar.

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 y su significado

Cada archivo multimedia se identifica mediante un Content URI como content://media/external/images/media/1234. El URI externo apunta al almacenamiento compartido, mientras que el interno apunta a los archivos multimedia del sistema. Usar URI en lugar de rutas de archivo es una ventaja clave de MediaStore: la aplicación no necesita acceso al sistema de archivos y funciona a través de un proveedor de contenido seguro.

Tipos de archivos multimedia en MediaStore

MediaStore admite cuatro tipos principales de medios, cada uno con su propia tabla y conjunto de metadatos. Los desarrolladores seleccionan la tabla adecuada según el tipo de contenido con el que trabaja la aplicación.

  • MediaStore.Images — fotos, capturas de pantalla e imágenes. Columnas: BUCKET_DISPLAY_NAME, IS_PRIVATE, LATITUDE, LONGITUDE.
  • MediaStore.Video — grabaciones de video y películas. Columnas: DURATION, RESOLUTION, IS_DRM.
  • MediaStore.Audio — pistas de música y archivos de sonido. Columnas: ARTIST, ALBUM, COMPOSER, TRACK.
  • MediaStore.Files — documentos y otros archivos. Disponible desde Android 10 para acceso compartido.

Además de las columnas estándar, cada tabla contiene campos del sistema: _ID, DATA (obsoleto), SIZE, MIME_TYPE, DATE_ADDED, DATE_MODIFIED. Desde Android 10, el campo DATA está marcado como obsoleto, y los desarrolladores deben trabajar abriendo un InputStream a través de URI.

Permisos para trabajar con MediaStore

MediaStore requiere permisos explícitos, que difieren según la versión de Android. Antes de Android 13, se usaba el permiso único READ_EXTERNAL_STORAGE. A partir de Android 13 (API 33), Google introdujo permisos granulares para cada tipo de medio.

Tipo de medioPermiso (API 33+)Anterior (API 29–32)
ImágenesREAD_MEDIA_IMAGESREAD_EXTERNAL_STORAGE
VideoREAD_MEDIA_VIDEOREAD_EXTERNAL_STORAGE
AudioREAD_MEDIA_AUDIOREAD_EXTERNAL_STORAGE
EscrituraWRITE_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE

Escribir en MediaStore también requiere WRITE_EXTERNAL_STORAGE para Android 9 e inferiores. A partir de Android 10, una aplicación puede escribir sus propios archivos en MediaStore sin permisos adicionales — el sistema concede acceso automáticamente al insertar un registro mediante ContentResolver.insert.

Solicitar permisos en tiempo de ejecución

Los permisos de MediaStore se solicitan a través del mecanismo estándar ActivityResultContracts.RequestMultiplePermissions. El usuario puede denegar la solicitud, y la aplicación debe manejar este escenario correctamente. Se recomienda verificar el permiso mediante ContextCompat.checkSelfPermission antes de cada acceso a MediaStore.

Ejemplos de código: lectura y escritura con MediaStore

MediaStore permite no solo leer, sino también escribir archivos multimedia. Para escribir una imagen o video, el desarrollador usa ContentResolver.insert y abre un OutputStream para la URI devuelta. El sistema añade automáticamente el archivo a la base de datos multimedia y lo indexa.

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 ->
        // escribir bytes al flujo
    }
}

Eliminar archivos multimedia con MediaStore

La eliminación se realiza mediante ContentResolver.delete con la URI del archivo. El sistema verifica los derechos de acceso: si el archivo pertenece a la aplicación actual, la eliminación ocurre sin permisos adicionales. Para archivos de otras aplicaciones en Android 10+, se requiere la confirmación del usuario a través de un diálogo del sistema.

MediaStore vs acceso directo a archivos

MediaStore API se diferencia fundamentalmente del acceso directo a archivos mediante File API. En lugar de rutas de archivo, se usan Content URI, y en lugar de operaciones de archivo, se usan métodos de ContentResolver. Esto proporciona tres ventajas clave: seguridad, indexación automática e interfaz unificada.

El acceso directo a archivos está restringido en Android 10+ para directorios compartidos. MediaStore sigue siendo la única forma de leer medios de Pictures, DCIM, Movies, Music y Download. Para archivos específicos de la aplicación (app-specific storage), el acceso directo se conserva — son las carpetas en Android/data y Android/media.

La elección entre MediaStore y el acceso directo depende del tipo de contenido. MediaStore es obligatorio para archivos multimedia compartidos accesibles por otras aplicaciones. La API de archivos directa es adecuada para archivos internos de la aplicación y caché. Storage Access Framework se usa para seleccionar documentos arbitrarios a través del selector del sistema.

Preguntas frecuentes

¿Qué es MediaStore API en Android?

MediaStore API es el proveedor de contenido del sistema Android para acceder a archivos multimedia del dispositivo: imágenes, videos, audio y documentos. La API proporciona una interfaz unificada a través de ContentResolver y una base de datos multimedia que indexa automáticamente todos los archivos.

¿Qué tipos de medios admite MediaStore?

MediaStore admite Images (imágenes), Video (videos), Audio (audio) y Files (documentos). Cada tipo tiene su propia tabla con su propio conjunto de metadatos: las imágenes tienen ORIENTATION, los videos tienen DURATION, los archivos de audio tienen ARTIST.

¿Qué permisos se necesitan para MediaStore en Android 13?

En Android 13+ se usan permisos granulares: READ_MEDIA_IMAGES para imágenes, READ_MEDIA_VIDEO para video y READ_MEDIA_AUDIO para audio. El usuario puede otorgar acceso solo a tipos específicos de medios.

¿Cómo escribir un archivo con MediaStore?

Para escribir, crea ContentValues con el nombre y tipo MIME, llama a ContentResolver.insert para obtener un URI, luego abre un OutputStream mediante ContentResolver.openOutputStream. El sistema indexa automáticamente el nuevo archivo.

¿En qué se diferencia MediaStore de Storage Access Framework?

MediaStore proporciona acceso programático a todos los archivos multimedia del dispositivo a través de una base de datos multimedia. Storage Access Framework abre un diálogo de selección de archivos del sistema y devuelve un URI — el usuario selecciona un archivo o carpeta específicos.

Resumen

  • MediaStore API es el mecanismo principal para acceder a archivos multimedia de Android, funcionando a través de un proveedor de contenido y una base de datos multimedia.
  • Base de datos multimedia indexa automáticamente imágenes, videos, audio y documentos, proporcionando acceso a metadatos a través de ContentResolver.
  • Android 10 convirtió a MediaStore en la única forma de acceder a archivos multimedia compartidos, restringiendo el acceso directo a archivos.
  • Android 13 introdujo permisos granulares READ_MEDIA_IMAGES, READ_MEDIA_VIDEO y READ_MEDIA_AUDIO en lugar del único READ_EXTERNAL_STORAGE.
  • Content URI reemplaza las rutas de archivo, garantizando un acceso seguro sin permisos root a archivos de otras aplicaciones.
  • Escritura con MediaStore se realiza mediante ContentResolver.insert y openOutputStream con indexación automática en la base de datos multimedia.
  • Elección entre MediaStore y SAF depende de la tarea: MediaStore para operaciones por lotes con medios, SAF para seleccionar archivos individuales por el usuario.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también