Guardar fotos en la galería con Android y Huawei Machine Learning
Clase 26 de 31 • Curso de Desarrollo de Aplicaciones con Huawei
Resumen
¿Cómo crear una función para guardar fotos en la galería de Android?
La posibilidad de guardar fotografías directamente en la galería de un dispositivo Android es una funcionalidad esencial para cualquier aplicación de cámara. En este contexto, aprenderemos cómo desarrollar una función robusta que permita guardar una imagen capturada desde una cámara selfie directamente en la galería.
¿Cómo se inicia la creación de la función "saveBitmapToGallery"?
Para comenzar, primero se debe definir una nueva función llamada saveBitmapToGallery
. Esta función tomará un parámetro del tipo bitmap
y devolverá un string
. Dentro de esta función, lo primero que se necesita hacer es establecer el directorio donde se guardarán las imágenes.
fun saveBitmapToGallery(bitmap: Bitmap): String {
val appDir = File("/storage/emulated/0/DCIM/Camera")
if (!appDir.exists()) {
if (!appDir.mkdirs()) {
Log.e("Error", "No pudimos crear el directorio")
return ""
}
}
}
¿Cómo se gestiona la creación del archivo de imagen?
Continuando con el desarrollo de la función, se procede a establecer un nombre para el archivo que va a almacenarse. Un buen enfoque es usar un nombre descriptivo y único, que incluya información temporal como la marca de tiempo.
val fileName = "SelfieCamera_" + System.currentTimeMillis() + ".jpg"
val file = File(appDir, fileName)
¿Cómo se maneja la compresión y escritura de la imagen?
Para guardar la imagen, es fundamental comprimir el bitmap
en un formato adecuado y escribirlo en el archivo antes definido. Se usará un FileOutputStream
para este propósito, asegurándose de gestionar adecuadamente la memoria.
try {
val fos = FileOutputStream(file)
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos)
fos.flush()
fos.close()
} catch (e: Exception) {
e.printStackTrace()
}
¿Cómo se actualiza la galería de Android?
Para que la nueva imagen aparezca en la galería del dispositivo, es necesario notificar al sistema Android sobre la existencia del nuevo archivo. Esto se hace usando un Intent
y un Broadcast
.
val uri = Uri.fromFile(file)
val intent = Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE)
intent.data = uri
context.sendBroadcast(intent)
¿Qué hacer si se encuentran problemas al guardar la foto?
Para solucionar problemas, como permisos insuficientes, se puede modificar el archivo AndroidManifest.xml
añadiendo la siguiente línea de configuración, lo que facilita el acceso al almacenamiento externo:
<application
...
android:requestLegacyExternalStorage="true">
...
</application>
¿Cómo verificar la funcionalidad?
Una vez implementada la función, es recomendable probar su funcionalidad instanciando la aplicación y tomando algunas fotos. Las imágenes capturadas deben aparecer en la galería del dispositivo, lo que confirmará que todo funciona correctamente.
Este proceso de implementación no solo permite guardar fotos en la galería, sino que sienta las bases para desarrollar aplicaciones de cámara más complejas y funcionales. Recuerda que el éxito está en la práctica y en la resolución de los desafíos del código, sigue adelante aprendiendo y experimentando.