En esta lección, se explica cómo capturar videos con las aplicaciones de cámara existentes.
Tu aplicación tiene una función, y la integración de videos es solo una pequeña parte de ella. El objetivo es tomar videos con un mínimo de complicaciones, y no reinventar la videocámara. Afortunadamente, la mayoría de los dispositivos con Android ya tienen una aplicación de cámara que graba videos. En esta lección, aprenderás cómo hacer que lo haga por ti.
Consulta los siguientes recursos relacionados:
Cómo solicitar la función de cámara
Para anunciar que tu aplicación depende de tener una cámara, coloca una etiqueta <uses-feature>
en el archivo de manifiesto:
<manifest ... > <uses-feature android:name="android.hardware.camera" android:required="true" /> ... </manifest>
Si tu aplicación usa una cámara para funcionar, pero no la requiere, configura android:required
como false
. De esa forma, Google Play permitirá que dispositivos sin cámara descarguen la aplicación. Luego, es tu responsabilidad verificar la disponibilidad de la cámara en el tiempo de ejecución. Para ello, llama a hasSystemFeature(PackageManager.FEATURE_CAMERA)
.
Si no hay una cámara disponible, debes inhabilitar las funciones de la cámara.
Graba un video con una app de cámara
La forma en que Android delega acciones a otras aplicaciones es mediante la invocación de un Intent
que describe lo que deseas que se haga. Este proceso tiene tres partes: el Intent
en sí, una llamada para iniciar el Activity
externo y un poco de código para manejar los datos de video cuando el foco vuelve a tu actividad.
A continuación, hay una función que invoca un intent para capturar video.
Kotlin
const val REQUEST_VIDEO_CAPTURE = 1 private fun dispatchTakeVideoIntent() { Intent(MediaStore.ACTION_VIDEO_CAPTURE).also { takeVideoIntent -> takeVideoIntent.resolveActivity(packageManager)?.also { startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE) } } }
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); } }
Observa que el método startActivityForResult()
está protegido por una condición que llama a resolveActivity()
, que muestra el primer componente de actividad que puede manejar el intent. Realizar esta verificación es importante porque si llamas a startActivityForResult()
con un intent que ninguna app puede manejar, tu app fallará. Por lo tanto, siempre que el resultado no sea nulo, se puede usar el intent.
Ve el video
La aplicación de cámara de Android muestra el video en el Intent
entregado a onActivityResult()
como un Uri
que apunta a la ubicación del video almacenado. Con el siguiente código, se recupera este video y se muestra en un VideoView
.
Kotlin
override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent) { if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) { val videoUri: Uri = intent.data videoView.setVideoURI(videoUri) } }
Java
@Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) { Uri videoUri = intent.getData(); videoView.setVideoURI(videoUri); } }