Utilice Jetpack Compose, CameraX y Coroutines para crear una aplicación fotográfica sencilla Parte 4: Selección de galería | Autor: David Pisoni | Septiembre de 2021
Utilice Jetpack Compose, CameraX y corrutinas para crear una aplicación fotográfica sencilla Parte 4: Selección de galería
Esta es la cuarta lección de la serie. Utilice las corrutinas Jetpack Compose, CameraX y Kotlin para crear una aplicación fotográfica sencillaSi acaba de unirse a nosotros y desea comenzar desde el principio, vaya al Paso 1: Utilice Acompañante en Jetpack Compose para solicitar permisos de dispositivo. De lo contrario, este artículo solo contendrá ejemplos; para ejecutar el código, debe construirse sobre el código de las lecciones anteriores.
El resto de esta serie es:
- Utilice el acompañamiento para solicitar permisos de dispositivo en Jetpack Compose
- Utilice las corrutinas Jetpack Compose, CameraX y Kotlin para la vista previa de la cámara
- Tome fotos con Jetpack Compose, CameraX y Coroutine de Kotlin
- Utilice Jetpack Compose para seleccionar fotos de la biblioteca multimedia (este artículo)
al final En el artículo anterior, tenemos una aplicación disponible que proporciona captura de imágenes de la cámara «apuntar y disparar», y luego muestra la imagen capturada en la pantalla. En esta lección, proporcionaremos otra fuente de imágenes, la biblioteca multimedia del dispositivo.
Antes del trabajo
Si crea esta aplicación conmigo, solo tenemos que hacer algunas tareas domésticas primero … MainContent
Y extraer emptyImageUri
Al valor de todo el archivo para que podamos compartirlo:
sigue adelante……
Selección de la biblioteca de imágenes
Si desea obtener más información sobre cómo utilizar la biblioteca multimedia de Android para acceder a varios tipos de archivos multimedia, consulte la guía. Acceda a archivos multimedia desde el almacenamiento compartido.
Permisos de lista
Ahora veamos cómo leer imágenes de la biblioteca de medios del dispositivo.Primero, necesitamos agregar otro permiso AndroidManifest.xml
:
Selección de galería Composable
Ahora construyamos nuestro Composable
Se utiliza para iniciar el selector de imágenes de Android. primer paso:
expliqué CompositionLocal
Objeto, donde LocalContext
Es un ejemplo en parte 2 De esta serie.
onImageUri
Es como mejoramos el resultado para Composable
Esta función se llama.El usuario solo puede elegir una imagen, por lo que solo una Uri
Debería ser devuelto.
rememberLauncherForActivityResult()
¿Es Jetpack Compose y el antiguo análogo? onRequestPermissionsResult()
O es una implementación más nueva: registerForActivityResult()
.
También vale la pena señalar que si el usuario sale sin seleccionar una imagen (por ejemplo, realizar una acción de «regresar»), entonces uri
Estará vacío, por lo que debemos establecerlo en el marcador de posición que establecimos anteriormente, EMPTY_IMAGE_URI
.
Pero estos códigos aún no han comenzado nada, así que continuemos construyendo GallerySelect
:
Ahora nosotros launch()
esta launcher
Lo creamos arriba.Pero debido a que esto causará el efecto secundario de iniciar otro Activity
, Tenemos que terminar SideEffect
¡Si no hacemos esto, esto realmente fallará! Más detalles sobre esto en Jetpack Compose Side Effects.
Este código es adecuado para versiones de Android anteriores a Android 10, pero no para Android 10 y superior, porque necesitamos solicitar permiso para acceder a la biblioteca multimedia desde nuestra aplicación. Afortunadamente, Hemos escrito un Permission
Un contenedor para nuestra aplicación, para que podamos reutilizarlo aquí. (¿No está contento de que lo hayamos escrito para su reutilización? ¡De nada!) Este es el código completo GallerySelect
:
Si lo omite, escribimos Permission
Composable
En la primera parte de esta serie, Utilice el acompañamiento para solicitar permisos de dispositivo en Jetpack Compose.
Solo otros lugares notables tienen un botón adicional para forzar la llamada onImageUri()
, Esto indicará que el lanzador está completo.
Atarlo todo junto
Finalmente, necesitamos fusionarlo en nuestro MainContent
. Decidí simplemente agregar un botón que se superponga a la vista previa de la cámara, al presionar este botón agregará GallerySelect
Ir a la vista actual.Así que ahora nuestro principal else
Evitar MainContent
Se parece a esto:
El código para este ejercicio se puede encontrar en GitHub.
Así que envolvemos CameraCapture
en un Box
Entonces podemos agregar Button
encima de eso.Apretar Button
Cambió nuestra suspensión showGallerySelect
llegar true
. Dado que el estado de este valor es remember
ed, cerrado Composable
Cuando el valor cambia, se vuelve a dibujar a sí mismo, lo que hace que la vista cambie a GallerySelect
Composable
Lo creamos antes.
Terminado
¡Eso es todo! La aplicación que creamos no es muy útil por sí sola: cree una capa de repositorio y conéctela a una base de datos, en realidad puede usar esta aplicación como una galería. O puede usar MLKit Vision para el análisis de imágenes para identificar varios objetos en la foto. ¡Aquí hay muchas posibilidades!
Espero que estos artículos le hayan resultado útiles. Traté de mantenerlos breves y concentrados. Publique cualquier comentario o sugerencia en la sección de comentarios; me encantaría escuchar sus opiniones.