Everything about storage on Android

Everything about storage on Android

¿Cómo se gestiona el almacenamiento en Android?

Arquitectura del Almacenamiento en Android

  • Yacine Rezgui, parte del equipo de Developer Relations Engineering en Android, presenta una visión general sobre el almacenamiento en Android, incluyendo APIs y mejores prácticas.
  • El almacenamiento primario de un dispositivo se encuentra en memoria flash o disco duro, donde se instalan el sistema operativo y las aplicaciones. Cada aplicación tiene un directorio para su almacenamiento interno que es privado.
  • La memoria externa de la aplicación permite guardar archivos específicos de la app. Sin embargo, algunos dispositivos pueden tener espacio limitado, haciendo que esta memoria solo esté disponible a través de una tarjeta micro SD.
  • El almacenamiento compartido es accesible por todas las aplicaciones y no se elimina al desinstalar una app. Este contenido es indexado automáticamente por MediaStore para facilitar la búsqueda de archivos multimedia.

Cambios en el Acceso a Archivos Compartidos

  • A partir de Android 10, se introdujo "scoped storage", limitando el acceso a archivos compartidos solo a medios como fotos y videos. Los documentos deben ser accedidos mediante un selector de documentos.
  • WRITE_EXTERNAL_STORAGE ha sido desaprobado; ahora no se requiere permiso para agregar archivos al almacenamiento compartido. Se necesita consentimiento explícito del usuario para modificar o eliminar archivos multimedia.

Casos Comunes de Uso del Almacenamiento

  • Para descargar datos confidenciales (como un archivo de configuración), se utiliza OkHttp para realizar solicitudes HTTPS y guardar los datos en el almacenamiento interno utilizando context.filesDir.
  • Si los activos descargados no son confidenciales pero son relevantes solo para la app, deben guardarse también en el almacenamiento interno. Se debe verificar si hay suficiente espacio antes de usar el almacenamiento externo.

Agregar Archivos al Almacenamiento Compartido

  • Para agregar imágenes al almacenamiento compartido, hasta Android 9 era necesario solicitar permisos externos; desde Android 10 ya no es necesario gracias a los cambios en scoped storage.
  • Los archivos deben ser escaneados usando media scanner después de copiarlos al nuevo archivo para que sean visibles cuando otras apps consulten este proveedor de contenido.

Mejores Prácticas y Recomendaciones

  • Se recomienda utilizar la API MediaStore para agregar archivos al almacenamiento compartido debido a su mejor rendimiento y características adicionales disponibles desde Android 10.

Introducción a la Selección de Documentos en Android

Uso del Intent OpenDocument

  • Se utilizará el selector de documentos mediante la acción OpenDocument para manejar la selección de archivos.
  • Es necesario agregar la dependencia de Jetpack Activity al proyecto si aún no está presente.
  • Se registrará el resultado de la actividad OpenDocument, que gestionará la lógica de resolución del intent.
  • Si el usuario selecciona un archivo, se obtendrá un URI que se podrá abrir utilizando el content resolver.
  • La acción OpenDocument está disponible en dispositivos con Android 4.4 y versiones superiores.

Mejoras en el Acceso a Fotos y Videos

  • En versiones hasta Android 12L, era necesario solicitar permisos para leer almacenamiento externo y crear una interfaz propia para seleccionar elementos.
  • Se plantea una alternativa más sencilla y respetuosa con la privacidad tanto para desarrolladores como para usuarios.

Introducción del Photo Picker en Android 13

  • En Android 13 se introdujo el photo picker, una forma más amigable con la privacidad para seleccionar imágenes y videos sin necesidad de permisos en tiempo de ejecución.
  • Mejora la experiencia del usuario (UX), permitiendo limitar el número de elementos seleccionables y su integración es simple, requiriendo solo unas pocas líneas de código.
  • El photo picker será compatible con proveedores de medios en la nube como Google Photos, incluyendo fotos respaldadas incluso si no están guardadas localmente.

Implementación del Photo Picker

  • Para usarlo, se debe agregar la dependencia Jetpack Activity versión 1.6 o superior al proyecto si no está presente.
  • Se registrará el resultado de actividad PickVisualMedia, que manejará los resultados del intent usando el photo picker cuando esté disponible.
  • Si no está disponible, se recurrirá al selector de documentos para dispositivos más antiguos.

Permisos Nuevos y Recomendaciones

  • Para mantener acceso a un archivo después del cierre de la aplicación, se puede llamar a takePersistableUriPermission.
  • Esto es útil para casos específicos como respaldo fotográfico en galerías; se han introducido nuevos permisos en Android 13 dirigidos a tipos específicos de archivos multimedia.
  • La privacidad y transparencia han mejorado significativamente; las nuevas APIs permiten mayor control al usuario sobre los accesos sin necesidad constante de solicitar permisos.
Video description

Persistence is a core element of every mobile app. Android provides different APIs to access or expose files with different tradeoffs. Should you request WRITE_EXTERNAL_STORAGE? How can you access an image on shared storage? Understand the key concepts of storage and take advantage of recent APIs to improve both your developer productivity and users' privacy. Speakers: Yacine Rezgui, Abhijeet Kaur Watch more: Watch all the Android Dev Summit sessions → https://goo.gle/ADS-All Watch all the Platform track sessions → https://goo.gle/ADS-Platform Subscribe to Android Developers → https://goo.gle/AndroidDevs #Featured #AndroidDevSummit #Android