6. Almacenamiento y gestión de archivos

6. Almacenamiento y gestión de archivos

6.1 Tipos de almacenamiento en Android

  • Interno (privado a la app)
  • Externo (público o específico de la app)
  • Scoped Storage (a partir de Android 10 )
  • Storage Access Framework (SAF)
  • Content Providers y MediaStore
  • Cache y archivos temporales
  • Cloud Storage y sincronización

6.2 Almacenamiento interno

Los archivos se guardan en un espacio privado accesible solo por la aplicación. No requiere permisos especiales.

  • Context.getFilesDir() – directorio para datos persistentes.
  • Context.getCacheDir() – archivos temporales que el sistema puede borrar.
  • Context.openFileOutput(nombre, modo) – flujo de escritura.
Directorio Uso
filesDir Datos privados persistentes
cacheDir Archivos temporales aptos para limpieza del sistema

6.3 Almacenamiento externo

Se divide en:

  • Público: accesible por el usuario y otras apps.
  • Privado: Context.getExternalFilesDir() para datos específicos.

Requiere permisos en tiempo de ejecución (lt Android 10):nbspWRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE.

6.4 Scoped Storage y permisos

  • Aísla a cada app de los datos de otras.
  • No necesita permisos para su propio espacio externo.
  • Para acceder a medios (imágenes, vídeo, audio) usar MediaStore.
  • Para archivos genéricos, usar SAF o permisos MANAGE_EXTERNAL_STORAGE (Android 11 ).

6.5 Storage Access Framework (SAF)

Permite al usuario seleccionar documentos y carpetas a través de un intent estándar.

  • Intent.ACTION_OPEN_DOCUMENT y ACTION_CREATE_DOCUMENT.
  • DocumentFile para navegación y operaciones (read(), write(), delete()).
  • Ideal para gestionar archivos fuera del sandbox de la app.

6.6 Content Providers y MediaStore

Integración con el repositorio común de medios:

  • Insertar/consultar URI de MediaStore para fotos, vídeo, audio.
  • Actualizar metadatos (EXIF, título, fecha) vía ContentResolver.
  • Uso de Cursor para iterar resultados.

6.7 Cache y archivos temporales

  • getCacheDir() y getExternalCacheDir(): espacio para datos transitorios.
  • Limitar tamaño y limpiar periódicamente.
  • Evitar almacenar datos críticos en cache.

6.8 Seguridad y cifrado

  • EncryptedFile (Jetpack Security) para cifrar y descifrar automáticamente.
  • KeyStore para gestión segura de claves.
  • Verificar integridad con checksum (SHA-256) si procede.

6.9 Buenas prácticas

  1. Minimizar permisos solicitados al usuario.
  2. Usar SAF/MediaStore en lugar de acceso directo cuando sea posible.
  3. Gestionar errores y excepciones I/O cuidadosamente.
  4. Bloquear operaciones de archivo en hilos de fondo (AsyncTask, Coroutines, WorkManager).
  5. Limpieza periódica de cache y temporales.
  6. Documentar rutas y estructuras de carpetas de la app.

Profundizando sobre: 6. Almacenamiento y gestión de archivos

Libros recomendados:

  • Android Programming: The Big Nerd Ranch Guide (K. Phillips B. Hardy) – Capítulos dedicados a almacenamiento interno, externo y bases de datos SQLite.
  • Professional Android (Reto Meier) – Sección sobre gestión de archivos, almacenamiento en la nube y optimización de E/S.
  • Android Cookbook: Problems and Solutions for Android Developers (I. F. Darwin) – Recetas prácticas para lectura/escritura de ficheros y uso de Content Providers.
  • Android Persistence with Room (P. Mai, A. Ward) – Guía de la biblioteca Room para bases de datos locales y migraciones.

Documentación oficial y guías en línea:

Codelabs y tutoriales prácticos:

Cursos y formación:

PreviusNext


¿Necesitas ayuda con este punto? Nuestra IA te puede ayudar

  • Hola 👋 , soy la IA de Synzen.org, puedes preguntarme siempre sobre la página donde estás leyendo, yo también la leo, así que puedo ayudarte a entenderlo, expandirlo, ponerte ejercicios…¡y mucho más!
Quiero saber más sobre… ...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *