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
- Minimizar permisos solicitados al usuario.
- Usar SAF/MediaStore en lugar de acceso directo cuando sea posible.
- Gestionar errores y excepciones I/O cuidadosamente.
- Bloquear operaciones de archivo en hilos de fondo (AsyncTask, Coroutines, WorkManager).
- Limpieza periódica de cache y temporales.
- 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:
- Guía de almacenamiento de datos en Android (developer.android.com)
- Android Training: Data and File Storage
- Android Jetpack DataStore – Alternativa moderna a SharedPreferences.
- Scoped Storage en Android 11 – Requisitos y buenas prácticas.
Codelabs y tutoriales prácticos:
- Room with a View – Ejemplo de almacenamiento en base de datos local.
- Working with Files – Lectura, escritura y acceso a ficheros.
- Ray Wenderlich: Android File Storage Tutorial – Tutorial paso a paso.
Cursos y formación:
- Udemy: Master Android Storage and File Handling
- Pluralsight: Android Persistence with Room
- Coursera: Android App Development Specialization – Módulo sobre almacenamiento y bases de datos.
Deja una respuesta