Introducción a HMS Core

1

Creación de Cámara Selfie con Kits de Huawei

2

Depuración de Aplicaciones en la Nube con Huawei Cloud Debugging

3

Desarrollo de Aplicaciones con Huawei Mobile Services Core

4

Creación de Proyecto Android Studio con Huawei Kits

5

Creación de Aplicaciones en AppGallery Connect de Huawei

6

Generación de Huella Digital SHA-256 para Android Studio

7

Configuración de APIs Huawei para Proyecto de Selfies en Android Studio

8

Configuración de Gradle para Huawei en Android Studio

9

Sincronización de aplicaciones con dependencias Huawei en Gradle

Autenticación con HMS Account Kit

10

Diseño de Pantalla de Login con Huawei Account Kit

11

Autenticación con Huawei Account Kit en Aplicaciones Android

12

Autenticación con Huawei ID en Aplicaciones Android

13

Implementación de Logout con Huawei AccountKit y Refactorización en Android

Construyendo nuestra cámara de selfies con HMS ML Kit

14

Diseño de Pantalla en Selficam con Huawei ML Kit

15

Permisos de Cámara en Aplicaciones Android

16

Configuración y Personalización de Cámaras en Android

17

Personalización de Interfaz Gráfica para Cámara en Android

18

Reconocimiento Facial con Machine Learning en Android

19

Creación del Motor de Lente para Selfie Cam en Android

20

Implementación de Layout para Actividad de Cámara en Android

21

Integración de Cámara y Botones en Aplicación de Selfies

22

Implementación de Verificación Facial en App Android

23

Detección de Sonrisa y Rostro en Cámaras Huawei

24

Detección de Rostros y Cambio de Cámara en Android Studio

25

Implementación de Funcionalidad de Toma y Retoma de Fotos en Android

26

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

Aplicando notificaciones push con HMS Push kit

27

Implementación de Huawei Push Notifications en Android

28

Implementación de Push Notifications en AppGallery Connect

29

Configuración y Envío de Notificaciones Push en AppGallery Connect

Conclusiones y consejos

30

Solución de Problemas Comunes en Desarrollo con Huawei HMS Core

31

Eventos de Huawei para Desarrolladores y Servicios Ofrecidos

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

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

26/31
Recursos

¿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.

Aportes 6

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Entiendo que para propositos de simplicidad estas definiendo el path donde se guarda la imagen, pero lo correcto es obtener la ruta con
getExternalFilesDir(Environment.DIRECTORY_PICTURES)
o usando la api de MediaStore

Yo tengo un dispositivo con Android 11 y no me funcionó la parte de guardar la imagen, debido a scoped storage y shared storage, las nuevas formas de almacenar los archivos que son obligatoria a partir de Android 10. Sí se guarda la imagen pero se guarda dentro del directorio de la app. Para guardarla en el directorio de imágenes del dispositivo debe hacerse de la siguiente manera con MediaStore:

// LiveFaceCameraActivity.kt
@RequiresApi(Build.VERSION_CODES.Q)
private fun saveToSharedStorage(bitmap: Bitmap): String {
    val dateInMilis = System.currentTimeMillis()
    val filename = "HSelfieCamera-${dateInMilis}.jpg"
    val collection = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
    val newImage: ContentValues = ContentValues().apply {
        put(MediaStore.Images.Media.DISPLAY_NAME, filename)
        put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg")
        put(MediaStore.MediaColumns.DATE_ADDED, dateInMilis)
        put(MediaStore.MediaColumns.DATE_MODIFIED, dateInMilis)
        put(MediaStore.MediaColumns.SIZE, bitmap.byteCount)
        put(MediaStore.MediaColumns.WIDTH, bitmap.width)
        put(MediaStore.MediaColumns.HEIGHT, bitmap.height)
    }

    val newImageUri = contentResolver.insert(collection, newImage)
    contentResolver.openOutputStream(newImageUri!!, "w").use {
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, it)
    }
    newImage.clear()

    contentResolver.update(newImageUri, newImage, null, null)

    return filename
}

Hasta ahora estoy muy satisfecho con la forma que esta explicando el profesor sus clases, mostrando los errores y la manera de corregirlos.

Increíble las funciones de huawei

No se que tiene esta clase en especifico, pero la explicación fue magistral

Me pareció muy interesante toda la validación establecida para el path del directorio Camera.
Considero que es de mucho beneficio para los estudiantes aprender a determinar todos los filtros posibles siempre al desarrollar.