Para realizar acciones básicas de la cámara, como capturar una foto o un video, con la aplicación de cámara predeterminada del dispositivo, no necesitas integrarla a la biblioteca de la cámara. En su lugar, usa un Intent
.
Cómo tomar una foto con una app de cámara
Android delega las acciones a otras aplicaciones invocando un Intent
. Este proceso tiene tres partes: el Intent
en sí, una llamada para iniciar la Activity
externa y un poco de código para controlar los datos de la imagen cuando el foco vuelve a tu actividad.
La siguiente es una función que invoca un Intent
para capturar una foto.
Kotlin
val REQUEST_IMAGE_CAPTURE = 1 private fun dispatchTakePictureIntent() { val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE) } catch (e: ActivityNotFoundException) { // display error state to the user } }
Java
static final int REQUEST_IMAGE_CAPTURE = 1; private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } catch (ActivityNotFoundException e) { // display error state to the user } }
Cómo grabar un video con una app de cámara
También puedes invocar un Intent
para capturar un video.
Kotlin
val REQUEST_VIDEO_CAPTURE = 1 private fun dispatchTakeVideoIntent() { Intent(MediaStore.ACTION_VIDEO_CAPTURE).also { takeVideoIntent -> takeVideoIntent.resolveActivity(packageManager)?.also { startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE) } ?: run { //display error state to the user } } }
Java
static final int REQUEST_VIDEO_CAPTURE = 1; private void dispatchTakeVideoIntent() { Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); if (takeVideoIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE); } else { //display error state to the user } }
El método startActivityForResult()
está protegido por una condición que llama a resolveActivity()
, que muestra el primer componente de actividad que puede controlar el Intent
. Realiza esta comprobación para asegurarte de estar invocando un Intent
que no hará fallar tu app.
Recursos adicionales
Para las acciones básicas de la cámara, usa un Intent
. De lo contrario, se recomienda usar las bibliotecas Camera2 y CameraX para algo más complejo que la captura básica de imágenes o videos.