Almacenamiento Externo Android: qué es, tipos de medios y cómo trabajar en desarrollo

Autor: IT Sectr Publicado: 2026-03-13 Tiempo de lectura: 11 min

El almacenamiento externo en dispositivos móviles es un medio de datos extraíble al que cualquier aplicación con los permisos adecuados puede acceder. Según el Android Open Source Project, 2026, a partir de Android 10, Google introdujo Scoped Storage, un modelo que restringe el acceso directo al sistema de archivos y requiere el uso de la API MediaStore para trabajar con archivos multimedia compartidos. Este enfoque mejora la seguridad de los datos del usuario y evita la filtración de información entre aplicaciones.

Puntos Clave

  • External Storage — almacenamiento extraíble (tarjeta SD, USB-OTG) disponible para lectura y escritura por diferentes aplicaciones
  • Scoped Storage en Android 10+ restringe el acceso directo al sistema de archivos y lo reemplaza con la API MediaStore
  • iOS no admite tarjetas SD — el acceso a archivos externos se realiza a través de Document Picker
  • Permisos READ_EXTERNAL_STORAGE y WRITE_EXTERNAL_STORAGE son obligatorios para Android 9 y versiones anteriores
  • Formateo de la tarjeta SD como almacenamiento interno o portátil determina el modelo de acceso y cifrado

¿Qué es el almacenamiento externo en dispositivos móviles?

El almacenamiento externo es un área de memoria que no forma parte del sandbox protegido de la aplicación y es accesible para otros programas. En Android, este término generalmente se refiere a la tarjeta SD, pero también incluye unidades USB conectadas mediante un adaptador OTG y unidades en la nube integradas a nivel del sistema de archivos. La principal diferencia con el almacenamiento interno es la falta de aislamiento: cualquier aplicación con los permisos adecuados puede leer y modificar archivos en el almacenamiento externo.

En Android, el almacenamiento externo tiene dos modos principales: portátil y adoptable. Cuando se formatea una tarjeta SD como almacenamiento portátil, permanece extraíble y se formatea en FAT32 o exFAT. En el modo de almacenamiento adoptable, la tarjeta se formatea en ext4 y se cifra con AES-128, y el sistema la trata como una extensión de la memoria interna. El modo adoptable está disponible desde Android 6.0 Marshmallow, pero los fabricantes de dispositivos a menudo deshabilitan esta función en su firmware. Según las estadísticas de Google Play Console, solo alrededor del 12% de los dispositivos Android admiten el almacenamiento adoptable, por lo que no se recomienda confiar en la expansión de la memoria interna mediante tarjeta SD como única opción.

En iOS, no hay tarjetas SD tradicionales. Apple utiliza una arquitectura cerrada donde todo el almacenamiento se basa en memoria flash interna e iCloud. Las unidades externas son compatibles a través del puerto Lightning o USB-C, pero el acceso a ellas está limitado al administrador de archivos del sistema Files y a las aplicaciones que se integran con Document Picker. El usuario decide qué archivos abrir desde una fuente externa: la aplicación no puede escanear una unidad conectada sin consentimiento explícito.

Tipos de medios externos y sus características

La elección del medio externo depende de los requisitos de velocidad, capacidad y portabilidad. Los diferentes tipos de medios tienen distintas características de velocidad, sistemas de archivos y casos de uso en aplicaciones móviles.

Tipo de medioCapacidad máx.Velocidad de lecturaSistema de archivos
SD UHS-I2 TBhasta 104 MB/sexFAT / FAT32
SD UHS-II2 TBhasta 312 MB/sexFAT / FAT32
USB 3.0 OTG2 TBhasta 400 MB/sexFAT / NTFS / FAT32
USB-C SSD4 TBhasta 1000 MB/sexFAT / APFS / NTFS

Tarjetas SD y clases de velocidad

Las tarjetas SD se clasifican por velocidad de escritura: Clase 10 (10 MB/s), U1 (10 MB/s), U3 (30 MB/s), V30 (30 MB/s) y V90 (90 MB/s). La grabación de video 4K requiere una tarjeta de al menos U3 o V30. Para aplicaciones móviles que trabajan con archivos multimedia grandes (procesamiento de fotos, edición de video), se recomienda usar tarjetas de clase U3 y superiores. La velocidad de la tarjeta afecta directamente el rendimiento de la aplicación: grabar video 4K en una tarjeta Clase 10 puede causar pérdida de fotogramas debido al ancho de banda insuficiente. Al elegir una tarjeta SD para una aplicación, preste atención no solo a la clase de velocidad, sino también a la clasificación de Clase de Rendimiento de Aplicación: A1 y A2 indican el rendimiento mínimo de lectura y escritura aleatoria, crítico para las operaciones de bases de datos y caché de aplicaciones.

Unidades USB-OTG

USB-OTG (On-The-Go) permite conectar unidades USB externas a un dispositivo móvil mediante un adaptador. Android ha sido compatible con OTG desde la versión 3.1, pero montar la unidad requiere un núcleo con soporte del sistema de archivos. FAT32 y exFAT son compatibles de forma nativa, NTFS — solo en dispositivos con núcleo personalizado o mediante la biblioteca Paragon. En iOS, el soporte para unidades USB apareció en iOS 13 con la aplicación Files. Para trabajar con una unidad, la aplicación debe usar UIDocumentPickerViewController, que proporciona acceso solo a los archivos seleccionados por el usuario — iOS no otorga acceso completo al sistema de archivos de la unidad.

Almacenamiento en la nube como extensión

Los servicios en la nube — iCloud, Google Drive, Dropbox — pueden integrarse en el sistema de archivos del dispositivo a través de proveedores del sistema. En iOS, iCloud Drive forma parte del contenedor Sandbox de la aplicación y los archivos se sincronizan automáticamente entre los dispositivos del usuario. En Android, Google Drive proporciona una API para leer y escribir archivos, pero no se produce un montaje directo en el sistema de archivos. Para aplicaciones móviles que trabajan con grandes volúmenes de datos, el almacenamiento en la nube puede servir como alternativa a la tarjeta SD, especialmente en dispositivos sin ranura de expansión.

Cómo trabajar con almacenamiento externo en Android

Trabajar con almacenamiento externo en Android depende de la versión del sistema operativo y del modelo Scoped Storage. El proceso de acceso a archivos difiere para Android 9 y versiones anteriores, Android 10–12 y Android 13+.

Acceso a través de la API MediaStore

A partir de Android 10, la forma principal de acceder a archivos multimedia compartidos es la API MediaStore. Esta API proporciona una interfaz unificada para leer y escribir imágenes, videos y archivos de audio en el almacenamiento compartido. Una aplicación no requiere el permiso READ_EXTERNAL_STORAGE para acceder a sus propios archivos, pero la lectura de archivos de otras aplicaciones aún requiere permiso explícito del usuario. MediaStore indexa automáticamente los archivos multimedia y proporciona un ContentResolver para consultarlos.

kotlin
val collection = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
} else {
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI
}

val projection = arrayOf(
    MediaStore.Images.Media._ID,
    MediaStore.Images.Media.DISPLAY_NAME
)

val cursor = contentResolver.query(collection, projection, null, null, null)

Después de ejecutar la consulta, recibe un Cursor que contiene los URI de los archivos. Para leer un archivo, abra un InputStream a través de contentResolver.openInputStream(uri). La escritura se realiza de manera similar a través de contentResolver.openOutputStream(uri). MediaStore maneja automáticamente los conflictos de nombres y proporciona la capacidad de insertar nuevos archivos mediante contentResolver.insert(uri, values), que devuelve el URI del archivo creado.

Trabajo con archivos arbitrarios a través de SAF

Storage Access Framework (SAF) es la forma recomendada de acceder a archivos arbitrarios en Android 10+. SAF proporciona un diálogo del selector de archivos del sistema a través del cual el usuario otorga a la aplicación acceso a un archivo o directorio específico. La aplicación recibe un URI de acceso que permanece válido hasta que el dispositivo se reinicia o hasta que el permiso se revoca explícitamente en la configuración. SAF no requiere permisos READ_EXTERNAL_STORAGE ni WRITE_EXTERNAL_STORAGE, lo que simplifica la publicación en Google Play y reduce la cantidad de solicitudes de permisos.

kotlin
val requestCode = 42
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
intent.addFlags(
    Intent.FLAG_GRANT_READ_URI_PERMISSION
        or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
)
startActivityForResult(intent, requestCode)

Cómo trabajar con almacenamiento externo en iOS

En iOS, el trabajo con archivos externos se basa en UIDocumentPickerViewController, que el usuario abre para seleccionar archivos o directorios específicos. La aplicación no tiene acceso directo al sistema de archivos de la unidad externa, solo a los archivos que el usuario seleccionó explícitamente. Después de la selección, la aplicación recibe una URL temporal en el contenedor Sandbox y puede trabajar con el archivo a través de FileManager.

Uso de UIDocumentPickerViewController

UIDocumentPickerViewController permite al usuario seleccionar uno o más archivos de cualquier fuente disponible: iCloud Drive, una unidad USB conectada o un servicio en la nube de terceros. Después de la selección, el controlador devuelve una matriz de URL que la aplicación puede leer durante la sesión. Para conservar el acceso después de que la aplicación se cierre, debe llamar a startAccessingSecurityScopedResource() y guardar un marcador de ámbito de seguridad en UserDefaults.

swift
let picker = UIDocumentPickerViewController(
    forOpeningContentTypes: [.data, .image],
    asCopy: true
)
picker.delegate = self

func documentPicker(
    controller: UIDocumentPickerViewController,
    didPickDocumentsAt urls: [URL]
) {
    guard let url = urls.first else { return }
    let data = try Data(contentsOf: url)
}

El parámetro asCopy: true significa que iOS copiará el archivo en el contenedor Sandbox de la aplicación, y la aplicación obtendrá su propia copia independiente del archivo original. Si se especifica asCopy: false, la aplicación recibe una referencia al archivo original, pero para acceder a él, se debe llamar a url.startAccessingSecurityScopedResource(). Sin esta llamada, la lectura del archivo generará una excepción. Después de terminar de trabajar con el archivo, llame siempre a url.stopAccessingSecurityScopedResource() para liberar el recurso y evitar fugas de descriptores.

Limitaciones y seguridad del almacenamiento externo

La seguridad del almacenamiento externo es menor que la del almacenamiento interno porque los archivos son accesibles para otras aplicaciones. Cualquier aplicación con permiso READ_EXTERNAL_STORAGE puede leer todos los archivos de la tarjeta SD, incluidos aquellos que su aplicación creó para almacenar temporalmente datos confidenciales. Una aplicación maliciosa podría escanear la tarjeta SD y extraer datos del usuario si no están cifrados. Por lo tanto, se recomienda encarecidamente no almacenar tokens de autenticación, contraseñas o datos personales del usuario en el almacenamiento externo en texto plano.

En Android 10+, Scoped Storage limita significativamente la capacidad de las aplicaciones para acceder al sistema de archivos compartido. Una aplicación solo puede leer los archivos que ella misma creó sin permiso, y acceder a archivos de otras aplicaciones requiere el consentimiento explícito del usuario a través del diálogo de SAF. Sin embargo, esta restricción no se aplica a las aplicaciones con una versión de SDK objetivo inferior a 29: continúan funcionando bajo el modelo antiguo, lo que crea un riesgo para los usuarios que no han actualizado sus aplicaciones. Google Play ha requerido targetSdkVersion 29+ para todas las aplicaciones nuevas y actualizadas desde 2021.

El formateo y el cifrado son otro aspecto importante de la seguridad. Una tarjeta SD formateada como almacenamiento portátil no está cifrada por el sistema de forma predeterminada. Incluso al usar almacenamiento adoptable, el cifrado solo se activa si el fabricante del dispositivo ha habilitado esta función en el firmware. Para proteger los datos confidenciales guardados en el almacenamiento externo, use la biblioteca EncryptedFile de AndroidX Security, que cifra cada archivo por separado usando AES256-GCM, independientemente del cifrado del sistema.

Recomendaciones para usar el almacenamiento externo

El uso efectivo del almacenamiento externo requiere un equilibrio entre la disponibilidad de los datos y la seguridad. Siga estas reglas para garantizar un almacenamiento confiable de los archivos del usuario.

  • No almacene datos confidenciales en el almacenamiento externo sin cifrado. Use EncryptedFile o EncryptedSharedPreferences para proteger tokens, contraseñas y datos personales
  • Verifique la disponibilidad del almacenamiento externo antes de escribir: use Environment.getExternalStorageState() para comprobar el estado de la tarjeta SD. La tarjeta puede estar retirada, dañada o no disponible para escritura
  • Use Scoped Storage en Android 10+ y SAF para acceder a archivos compartidos. Esto reduce la cantidad de permisos solicitados y mejora la experiencia del usuario
  • Maneje siempre las excepciones al trabajar con almacenamiento externo. Un archivo puede ser eliminado por otra aplicación o movido durante la lectura, lo que provocará una FileNotFoundException
  • Advierta al usuario antes de escribir grandes cantidades de datos en el almacenamiento externo. Muestre un diálogo de confirmación y permita elegir un directorio a través de SAF

Es importante recordar que el almacenamiento externo no garantiza la integridad de los datos durante fallos. Las tarjetas SD tienen un número limitado de ciclos de reescritura, especialmente los modelos económicos de Clase 4 y Clase 6. Con escritura intensiva (por ejemplo, registro o almacenamiento en caché de datos en streaming), una tarjeta puede fallar en cuestión de meses. Para tales escenarios, use memoria interna o almacenamiento en la nube, y guarde solo archivos en el almacenamiento externo cuya pérdida el usuario considere aceptable. Verifique regularmente el estado de la tarjeta SD a través de StatFs y notifique al usuario sobre errores críticos del sistema de archivos.

Preguntas Frecuentes

¿Se requiere permiso para acceder al almacenamiento externo en Android 13?

En Android 13+, el permiso READ_EXTERNAL_STORAGE se ha reemplazado por otros más granulares: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO y READ_MEDIA_AUDIO. Para otros tipos de archivos, use SAF.

¿Se puede formatear una tarjeta SD como almacenamiento interno?

Sí, la función adoptable storage está disponible en Android 6.0+. La tarjeta se formatea en ext4 con cifrado AES-128. Sin embargo, muchos fabricantes deshabilitan esta opción y aproximadamente el 88% de los dispositivos no admiten el almacenamiento adoptable.

¿Cómo verificar si hay una tarjeta SD instalada en el dispositivo?

Use el método Environment.getExternalStorageState(), que devuelve una cadena de estado. El valor MEDIA_MOUNTED significa que la tarjeta está disponible para lectura y escritura. Otros valores indican errores o la ausencia de una tarjeta.

¿Cuál es la diferencia entre Scoped Storage y el acceso completo al sistema de archivos?

Scoped Storage restringe la aplicación a su propio contenedor y a las galerías multimedia compartidas de MediaStore. El acceso completo permite leer cualquier archivo en el dispositivo. Scoped Storage mejora la seguridad de los datos del usuario y es obligatorio para las aplicaciones nuevas.

¿Cómo obtener un URI para acceder a un archivo en una tarjeta SD a través de SAF?

Inicie un Intent con la acción ACTION_OPEN_DOCUMENT_TREE, que abrirá un diálogo del selector de directorios del sistema. Después de la selección, recibirá un permiso URI válido hasta el reinicio. Guarde este URI en SharedPreferences para su uso posterior.

Resumen

  • External Storage — almacenamiento extraíble (tarjeta SD, USB-OTG) accesible para todas las aplicaciones con permisos adecuados
  • Scoped Storage en Android 10+ restringe el acceso directo al sistema de archivos e introduce la API MediaStore para archivos multimedia
  • iOS no admite tarjetas SD — el acceso a archivos externos solo está disponible a través de UIDocumentPickerViewController
  • Las tarjetas SD se dividen en clases de velocidad: Clase 10, U1, U3, V30, V90 — se requiere U3 como mínimo para grabación de video 4K
  • La seguridad del almacenamiento externo es menor que la del almacenamiento interno — cifre los datos confidenciales antes de escribirlos
  • El almacenamiento adoptable permite usar una tarjeta SD como extensión de la memoria interna, pero solo es compatible con el 12% de los dispositivos
  • Se recomienda usar SAF para acceder a archivos arbitrarios y no almacenar datos críticos sin cifrado

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