Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

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:

  • 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, si los archivos están en un directorio dentro del almacenamiento interno

Sí, si los archivos están en un directorio dentro del almacenamiento externo
Contenido multimedia Archivos multimedia que se pueden compartir (imágenes, archivos de audio, videos) API de MediaStore READ_EXTERNAL_STORAGE o WRITE_EXTERNAL_STORAGE cuando se accede a archivos de otras apps en Android 10 (nivel de API 29) o superior

Se requieren permisos para todos los archivos en Android 9 (nivel de API 28) o inferior
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 aplicación 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 está iniciando, 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 ubicados 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:

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

Permisos y acceso al almacenamiento externo

Android define los siguientes permisos para el acceso de lectura y escritura al almacenamiento externo: READ_EXTERNAL_STORAGE y WRITE_EXTERNAL_STORAGE.

En las versiones anteriores de Android, las apps debían declarar estos permisos para acceder a cualquier archivo fuera de los directorios específicos de la app en el almacenamiento externo. 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 ese archivo. 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.

Almacenamiento específico

Para darles a los usuarios más control sobre sus archivos y acotar el desorden, las aplicaciones 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 aplicación 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.

Si tu app incluye un caso práctico que no está contemplado en el almacenamiento específico, envía una solicitud de función y usa la función de compatibilidad de apps que proporciona la plataforma.

Prácticas recomendadas para operar en archivos

En esta sección, se presentan algunas prácticas recomendadas generales para abrir y compartir archivos desde tu app.

No abras ni cierres archivos varias veces.

Para ayudar a mantener el rendimiento de la app, no abras ni cierres el mismo archivo varias veces. Para el sistema resulta costoso abrir un archivo y leerlo por primera vez.

Cómo compartir archivos individuales

Para compartir archivos individuales o datos de una app con otras, Android proporciona las siguientes API:

  • Si deseas compartir archivos específicos con otras apps, usa la API de FileProvider.
  • Si deseas exponer datos a otras apps, puedes usar un proveedor de contenido. Los proveedores de contenido te brindan el control total del acceso de lectura o escritura que se brinda a otras apps. Aunque puedes usar proveedores de contenido con cualquier medio de almacenamiento, suelen usarse más con bases de datos.

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