Guardar fotos en la galería con Android y Huawei Machine Learning

Clase 26 de 31Curso de Desarrollo de Aplicaciones con Huawei

Contenido del curso

Introducción a HMS Core

Construyendo nuestra cámara de selfies con HMS ML Kit

Resumen

Completar una cámara de selfie implica no solo capturar la imagen, sino también almacenarla correctamente en la galería del dispositivo. Aquí se construye paso a paso la función que toma un bitmap, lo comprime en formato JPG y lo registra en el sistema de archivos de Android para que aparezca visible en la galería.

¿Cómo se crea la función saveBitmapToGallery?

Partiendo de la variable bitmap creada previamente, se define una nueva función llamada saveBitmapToGallery que recibe un objeto de tipo Bitmap y retorna un String con la ruta absoluta del archivo guardado [01:00].

El primer paso dentro de la función es establecer el directorio de destino. Se crea una variable appDir de tipo File con la ruta genérica /storage/emulated/0/DCIM/Camera. Esta ruta funciona en la mayoría de dispositivos Android y garantiza que la foto quede almacenada donde la galería pueda encontrarla [01:22].

Si el directorio no existe, se intenta crear con mkdir. En caso de fallo, se registra un error con Log.e y se retorna vacío para evitar que la aplicación siga ejecutándose sin un destino válido [01:50].

¿Cómo se genera un nombre de archivo único?

Se construye un filename concatenando el prefijo hselfiecamera, la marca de tiempo actual obtenida con System.currentTimeMillis() y la extensión .jpg [02:15]. Esto asegura que cada foto tenga un nombre irrepetible basado en la fecha, hora, minutos y segundos exactos de la captura.

Con ese nombre y el directorio ya definidos, se instancia un objeto File que representa el archivo final en disco [02:40].

¿Qué papel juegan el FileOutputStream y el broadcast?

Dentro de un bloque try-catch —necesario porque se trabaja con operaciones de entrada y salida en tiempo de ejecución— se realizan estos pasos [02:50]:

  • Se crea un FileOutputStream (FOS) asociado al archivo.
  • Se llama a bitmap.compress() indicando formato JPEG, calidad del 100% y el FOS como destino.
  • Se ejecuta flush() para liberar la memoria del stream.
  • Se cierra el FOS con close(), asegurando que el recurso no se duplique en memoria.

Después de escribir el archivo, se crea una URI a partir del File para referenciar la ubicación dentro del sistema [03:45]. Luego se lanza un broadcast mediante un Intent con la acción ACTION_MEDIA_SCANNER_SCAN_FILE. Este mecanismo le indica a Android que debe escanear el nuevo archivo, verificar su formato y registrarlo en la galería [04:00].

Finalmente, la función retorna el absolute path del archivo guardado.

¿Por qué las fotos no se guardan y cómo se soluciona?

Al probar la aplicación por primera vez, las fotos no aparecen en la galería. El problema radica en un permiso faltante en el archivo AndroidManifest.xml [05:10].

La solución consiste en agregar dentro del tag de aplicación la configuración android:requestLegacyExternalStorage="true". Esta propiedad habilita el acceso al almacenamiento externo en modo legado, permitiendo que la app escriba directamente en la ruta de la galería [05:30].

Tras recompilar e instalar la aplicación:

  • Se toma una foto.
  • Se abre la galería.
  • La imagen aparece correctamente almacenada.
  • Se repite el proceso para confirmar que múltiples fotos se guardan sin conflicto [06:00].

¿Qué funcionalidades completas tiene la cámara de selfie?

Con el guardado de fotos funcionando, la cámara de selfie queda terminada e integra varias capacidades [06:30]:

  • Reconocimiento de rostros mediante Huawei Machine Learning Kit.
  • Detección de emociones, específicamente la sonrisa, como disparador automático.
  • Pintura de un cuadro sobre el rostro detectado para que el modelo sepa cuándo capturar.
  • Guardado automático en la galería del dispositivo.

El siguiente paso en el desarrollo es incorporar un servicio de notificaciones push para hacer la aplicación más completa y atractiva. Si ya lograste guardar tus selfies, comparte cómo fue tu experiencia integrando estos servicios de Huawei.

      Guardar fotos en la galería con Android y Huawei Machine Learning