Esta lição explica como capturar vídeos usando aplicativos de câmera existentes.
Seu aplicativo tem um trabalho a fazer, e integrar vídeos é só uma pequena parte dele. O objetivo é fazer vídeos com o mínimo de complicações possível, e não reinventar a filmadora. A maioria dos dispositivos Android já tem um aplicativo de câmera que grava vídeos. Nesta lição, você faz esse aplicativo gravar vídeos por você.
Confira os seguintes recursos relacionados:
Solicitar o recurso de câmera
Para anunciar que seu aplicativo depende de uma câmera, coloque uma tag <uses-feature>
no arquivo de manifesto:
<manifest ... > <uses-feature android:name="android.hardware.camera" android:required="true" /> ... </manifest>
Se seu aplicativo usa, mas não precisa de uma câmera para funcionar, configure android:required
como false
. Com isso, o Google Play permitirá que dispositivos sem câmera façam o download do seu aplicativo. Será sua responsabilidade verificar a disponibilidade da câmera no momento da execução, chamando hasSystemFeature(PackageManager.FEATURE_CAMERA)
.
Se uma câmera não estiver disponível, os recursos da câmera precisarão ser desativados.
Gravar um vídeo com um app de câmera
O Android delega ações a outros aplicativos invocando um Intent
que descreva o que você quer que seja feito. Esse processo envolve três partes: o próprio Intent
, uma chamada para iniciar o Activity
externo e um código para processar o vídeo quando o foco retorna à sua atividade.
Veja uma função que invoca uma intent para capturar vídeos.
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); } }
O método startActivityForResult()
é protegido por uma condição que chama resolveActivity()
, que retorna o primeiro componente de atividade que pode processar a intent. Fazer essa verificação é importante porque, se você chamar startActivityForResult()
usando uma intent que nenhum app pode processar, seu app falhará. Portanto, desde que o resultado não seja nulo, é seguro usar a intent.
Assistir o vídeo
O aplicativo Câmera do Android retorna o vídeo na Intent
entregue a onActivityResult()
como um Uri
que aponta para o local do vídeo no armazenamento. O código a seguir recupera o vídeo e exibe em 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); } }