Descripción general del almacenamiento de archivos y datos

Android utiliza un sistema de archivos que es similar a los sistemas de archivos basados en discos de otras plataformas. El sistema proporciona varias opciones para que guardes los datos de tu app como las siguientes:

  • Almacenamiento específico de la app: Almacena archivos diseñados solo para tu app, ya sea en directorios dedicados dentro de un volumen de almacenamiento interno o en directorios dedicados diferentes dentro del almacenamiento externo. Usa los directorios del almacenamiento interno para guardar información sensible a la que otras apps no deberían acceder.
  • Almacenamiento compartido: Almacena archivos que tu app pretenda compartir con otras apps, incluidos archivos multimedia, documentos y otros.
  • Preferencias: Almacena datos primitivos y privados en pares clave-valor.
  • Bases de datos: Almacena datos estructurados en una base de datos privada mediante la biblioteca de persistencias Room.

En la tabla siguiente se resumen las características de cada una de estas opciones:

Tipo de contenido Método de acceso Permisos requeridos ¿Pueden acceder otras apps? ¿Se quitan los archivos cuando se desinstala la app?
Archivos específicos de la app Archivos para uso exclusivo de tu app Desde el almacenamiento interno, getFilesDir() o getCacheDir()

Desde el almacenamiento externo, getExternalFilesDir() o getExternalCacheDir()
No se necesitan permisos en ningún caso para el almacenamiento interno

No se necesitan permisos para el almacenamiento externo cuando la app se usa en dispositivos con Android 4.4 (nivel de API 19) o versiones posteriores
No
Contenido multimedia Archivos multimedia que se pueden compartir (imágenes, archivos de audio, videos) API de MediaStore READ_EXTERNAL_STORAGE cuando accedes a archivos de otras apps en Android 11 (nivel de API 30) o versiones posteriores

READ_EXTERNAL_STORAGE o WRITE_EXTERNAL_STORAGE cuando accedes a archivos de otras apps en Android 10 (nivel de API 29)

Se requieren permisos para todos los archivos en Android 9 (nivel de API 28) o versiones anteriores
Sí, aunque la otra app necesita el permiso READ_EXTERNAL_STORAGE No
Documentos y otros archivos Otros tipos de contenido que se puede compartir, incluidos los archivos descargados Framework de acceso a almacenamiento Ninguno Sí, a través del selector de archivos del sistema No
Preferencias de la app Pares clave-valor Biblioteca Preferencias de Jetpack Ninguno No
Base de datos Datos estructurados Biblioteca de persistencias Room Ninguno No

La solución que elijas dependerá de tus necesidades específicas:

¿Cuánto espacio requieren tus datos?
El almacenamiento interno tiene espacio limitado para los datos específicos de la app. Usa otros tipos de almacenamiento si necesitas guardar una cantidad considerable de datos.
¿Qué tan confiable debe ser el acceso a los datos?
Si la funcionalidad básica de tu app requiere ciertos datos, como cuando tu app se inicia, coloca los datos en un directorio del almacenamiento interno o en una base de datos. No siempre se puede acceder a los archivos específicos de la app que se encuentran en el almacenamiento externo porque algunos dispositivos permiten que los usuarios quiten los dispositivos físicos que cumplen esa función.
¿Qué tipo de datos necesitas almacenar?
Si tienes datos que solo son importantes para tu app, usa el almacenamiento específico de la app. Para el contenido multimedia que se puede compartir, usa el almacenamiento compartido a fin de que otras apps puedan acceder a él. En el caso de los datos estructurados, usa las preferencias (para datos de clave-valor) o una base de datos (para datos que contengan más de 2 columnas).
¿Los datos deben ser privados para tu app?
Para almacenar datos sensibles (datos que no deberían ser accesibles desde ninguna otra app), usa el almacenamiento interno, las preferencias o una base de datos. El almacenamiento interno tiene el beneficio adicional de ocultar los datos a los usuarios.

Categorías de ubicaciones de almacenamiento

Android proporciona dos tipos de ubicaciones de almacenamiento físico: almacenamiento interno y almacenamiento externo. En la mayoría de los dispositivos, el almacenamiento interno es más pequeño que el externo. Sin embargo, el almacenamiento interno siempre está disponible en todos los dispositivos, lo que lo convierte en un lugar más confiable para colocar datos de los que depende tu app.

Los volúmenes extraíbles, como las tarjetas SD, aparecen en el sistema de archivos como parte del almacenamiento externo. Android representa estos dispositivos mediante una ruta de acceso, como /sdcard.

Las apps se guardan en el almacenamiento interno de forma predeterminada. Sin embargo, si el tamaño del archivo APK es muy grande, puedes indicar una preferencia en el archivo de manifiesto de la app para instalarla en el almacenamiento externo como se muestra a continuación:

<manifest ...
  android:installLocation="preferExternal">
  ...
</manifest>

Permisos y acceso al almacenamiento externo

Android define los siguientes permisos relacionados con el almacenamiento: READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE y MANAGE_EXTERNAL_STORAGE.

En las versiones anteriores de Android, las apps debían declarar el permiso READ_EXTERNAL_STORAGE para acceder a cualquier archivo fuera de los directorios específicos de la app en el almacenamiento externo. Además, las apps debían declarar el permiso WRITE_EXTERNAL_STORAGE para escribir en cualquier archivo fuera del directorio específico de la app.

Las versiones más recientes de Android se guían en mayor medida por el propósito de un archivo que por su ubicación para determinar la capacidad de una app de acceder a un archivo determinado y escribir en él. En particular, si tu app está orientada a Android 11 (nivel de API 30) o versiones posteriores, el permiso WRITE_EXTERNAL_STORAGE no tiene ningún efecto en el acceso de tu app al almacenamiento. Este modelo de almacenamiento basado en el propósito aumenta la privacidad del usuario, ya que las apps tienen acceso solo a las áreas del sistema de archivos del dispositivo que realmente usan.

Android 11 introduce el permiso MANAGE_EXTERNAL_STORAGE, que brinda acceso de escritura a archivos fuera del directorio específico de la app y MediaStore. Si quieres obtener información sobre este permiso y los motivos por los que la mayoría de las apps no necesitan declararlo a fin de cumplir con sus casos de uso, consulta la guía para administrar todos los archivos en un dispositivo de almacenamiento.

Almacenamiento específico

Para otorgarles a los usuarios más control sobre sus archivos y acotar el desorden, las apps orientadas a Android 10 (nivel de API 29) y versiones posteriores reciben acceso con alcance determinado al almacenamiento externo, o almacenamiento específico, de forma predeterminada. Estas apps solo tienen acceso al directorio específico de la app en el almacenamiento externo, así como a tipos específicos de contenido multimedia que creó la app.

Usa el almacenamiento específico a menos que tu app necesite acceso a un archivo almacenado fuera de un directorio específico de la app y fuera de un directorio al que puedan acceder las API MediaStore. Si almacenas archivos específicos de apps en el almacenamiento externo, puedes facilitar la adopción del almacenamiento específico colocando estos archivos en un directorio específico de la app en el almacenamiento externo. Así tu app mantendrá el acceso a esos archivos cuando esté habilitado el almacenamiento específico.

A fin de preparar tu app para el almacenamiento específico, consulta la guía de casos de uso y prácticas recomendadas de almacenamiento. Si tu app tiene otro caso de uso que no se incluye en el almacenamiento específico, envía una solicitud de función. Puedes inhabilitar temporalmente el uso del almacenamiento específico.

Cómo ver archivos en un dispositivo

Para ver los archivos almacenados en un dispositivo, usa el explorador de archivos de dispositivos de Android Studio.

Recursos adicionales

Para obtener más información sobre el almacenamiento de datos, consulta los siguientes recursos.

Videos