Descripción general de CameraX
Por qué elegir CameraX en lugar de las antiguas API de cámara
Descripción general de CameraX es una lección gratuita de Android Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Android Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Android Academy incluye 4 lecciones en total.
¿Por qué CameraX?
Agregar una cámara a una aplicación de Android solía ser complicado. La antigua API android.hardware.camera2 es potente, pero extremadamente verbosa y se comporta de forma diferente en los miles de dispositivos disponibles.
CameraX es una biblioteca de Jetpack que se basa en Camera2 y le ofrece una API sencilla, coherente y consciente del ciclo de vida. En este curso utilizará CameraX para mostrar una vista previa en directo, tomar fotos y grabar vídeo.
Qué resuelve CameraX
CameraX se diseñó en torno a tres objetivos:
- Facilidad de uso: mucho menos código repetitivo que con Camera2.
- Coherencia: Google lo prueba en un amplio laboratorio de dispositivos, por lo que los dispositivos con comportamientos particulares funcionan de forma predecible.
- Consciencia del ciclo de vida: la cámara se inicia y se detiene automáticamente junto con el ciclo de vida de su pantalla, de modo que no deja la cámara abierta.
Usted describe qué desea (una vista previa, una foto o un vídeo) y CameraX determina cómo hacerlo en el dispositivo actual.
Los tres casos de uso principales
CameraX se basa en casos de uso. Un caso de uso es una funcionalidad de cámara independiente. Los tres principales son:
Preview: muestra en pantalla lo que ve la cámara.ImageCapture: toma una foto.VideoCapture: graba vídeo.
Usted crea los casos de uso que necesita y los vincula a la cámara.
// You create the use cases you need:
val preview = Preview.Builder().build()
val imageCapture = ImageCapture.Builder().build()
// Later you bind them to a lifecycle and a camera.Cómo agregar las dependencias
CameraX se distribuye como varios artefactos. Debe agregarlos al archivo build.gradle.kts de su módulo. Una configuración habitual incluye la biblioteca principal, el backend camera2, la integración con el ciclo de vida y las utilidades de vista.
Mantenga todos los artefactos de CameraX en la misma versión para evitar conflictos.
dependencies {
val cameraxVersion = "1.3.4"
implementation("androidx.camera:camera-core:$cameraxVersion")
implementation("androidx.camera:camera-camera2:$cameraxVersion")
implementation("androidx.camera:camera-lifecycle:$cameraxVersion")
implementation("androidx.camera:camera-view:$cameraxVersion")
implementation("androidx.camera:camera-video:$cameraxVersion")
}Declaración de permisos
Para utilizar la cámara, debe declarar el permiso CAMERA en su archivo AndroidManifest.xml. Si también graba vídeo, puede necesitar RECORD_AUDIO.
Estos son permisos en tiempo de ejecución: declararlos no es suficiente; también debe solicitarlos al usuario durante la ejecución (esto se explica en lecciones posteriores).
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-feature
android:name="android.hardware.camera.any"
android:required="false" />El CameraProvider
El punto de entrada de CameraX es ProcessCameraProvider. Este conecta los casos de uso con la cámara y con el ciclo de vida de su pantalla.
Se obtiene de forma asíncrona mediante getInstance(), que devuelve un ListenableFuture. Desde Kotlin puede usar await() dentro de una corrutina.
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.camera.core.ExperimentalGetImage
suspend fun Context.getCameraProvider(): ProcessCameraProvider {
return ProcessCameraProvider.getInstance(this).await()
}Vinculación de casos de uso a un ciclo de vida
Una vez que tenga el proveedor, debe vincular sus casos de uso a un LifecycleOwner y a un CameraSelector (la cámara frontal o trasera).
Como la vinculación tiene en cuenta el ciclo de vida, CameraX abre automáticamente la cámara cuando la pantalla está visible y la cierra cuando deja de estarlo; no se necesita ninguna limpieza manual.
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
lifecycleOwner,
cameraSelector,
preview,
imageCapture
)Cómo elegir una cámara
Un CameraSelector indica a CameraX qué cámara física debe utilizar. Las dos más habituales son la cámara trasera predeterminada y la cámara frontal predeterminada.
También puede crear un selector personalizado para exigir características específicas, pero los valores predeterminados cubren prácticamente todas las aplicaciones.
// Back camera (most common for photos)
val back = CameraSelector.DEFAULT_BACK_CAMERA
// Front camera (selfies, video calls)
val front = CameraSelector.DEFAULT_FRONT_CAMERA
// Toggle between them by swapping the selector and re-binding.PreviewView: la superficie de visualización
CameraX renderiza la vista previa en directo en un PreviewView. Es un View normal de Android que gestiona la superficie, el escalado y la rotación por usted.
En Jetpack Compose puede integrarlo mediante AndroidView, que permite colocar un View clásico dentro de un elemento componible. En la siguiente lección configurará todo esto.
AndroidView(
factory = { context ->
PreviewView(context).apply {
scaleType = PreviewView.ScaleType.FILL_CENTER
}
},
modifier = Modifier.fillMaxSize()
)El ciclo de vida en acción
La mayor ventaja práctica de CameraX es que tiene en cuenta el ciclo de vida. Con Camera2 debía abrir manualmente la cámara en onResume y liberarla en onPause; olvidarse de hacerlo provocaba bloqueos o dejaba la cámara atascada.
Con CameraX, una vez que utiliza bindToLifecycle, el framework se encarga de todo. Cuando el usuario abandona la pantalla, la cámara se libera automáticamente; cuando vuelve, se abre de nuevo.
// No manual open/close needed.
// bindToLifecycle ties the camera to the screen's
// lifecycle, so it follows onStart/onStop for you.
cameraProvider.bindToLifecycle(lifecycleOwner, selector, preview)Su modelo mental
Conserve esta imagen mental durante el resto del curso:
- Obtenga un
ProcessCameraProvider. - Construya los casos de uso que necesite (
Preview,ImageCapture,VideoCapture). - Elija un
CameraSelector. - Use
bindToLifecyclepara conectar todos los elementos.
Todas las funciones de CameraX son simplemente una variación de estos cuatro pasos.
Comprobación rápida
Compruebe cuánto ha entendido de los fundamentos de CameraX.
Resumen
Ahora comprende la visión general de CameraX:
- CameraX encapsula Camera2 con una API más sencilla, coherente y consciente del ciclo de vida.
- Se basa en casos de uso:
Preview,ImageCaptureyVideoCapture. - Debe agregar los artefactos de CameraX, declarar el permiso
CAMERA, obtener unProcessCameraProvidery usarbindToLifecycle. - Un
CameraSelectorpermite elegir entre la cámara frontal y la trasera; unPreviewViewmuestra la imagen.
A continuación, configurará una vista previa en directo real en la pantalla.
Preguntas frecuentes
¿La lección «Descripción general de CameraX» es gratis?
Sí — el texto completo de «Descripción general de CameraX» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Android Academy, actualiza a CoddyKit PRO. El curso de Android Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Descripción general de CameraX»?
Por qué elegir CameraX en lugar de las antiguas API de cámara Practicas Android Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Android Academy?
No se requiere experiencia previa. Android Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Descripción general de CameraX»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Android Academy?
Sí. Cada lección de Android Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Descripción general de CameraX
- Cómo mostrar una vista previa de la cámara
- Cómo tomar fotografías
- Grabación de vídeo