Para realizar ações básicas, como capturar uma foto ou um vídeo usando o app de câmera padrão do dispositivo, não é necessário fazer a integração com uma biblioteca de câmera. Em vez disso, use uma Intent
.
Tirar uma foto com um app de câmera
O Android delega ações a outros aplicativos invocando uma Intent
. Esse processo envolve três partes: a própria Intent
, uma chamada para iniciar a Activity
externa e um código para processar os dados da imagem quando o foco retorna à sua atividade.
Veja esta função que invoca uma Intent
para capturar uma 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 } }
Gravar um vídeo com um app de câmera
Também é possível invocar uma Intent
para capturar um vídeo.
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 } }
O método startActivityForResult()
é protegido por uma condição que chama resolveActivity()
, que retorna o primeiro componente da atividade que pode processar a Intent
. Faça essa verificação para garantir que você está invocando uma Intent
que não vai causar uma falha no seu app.
Outros recursos
Para ações básicas da câmera, use uma Intent
. Caso contrário, é recomendável usar as bibliotecas Camera2 e CameraX para algo mais complexo do que a captura básica de imagem ou vídeo.
- Pacote CameraX
- Pacote Camera2
- Projetos de exemplo da câmera (link em inglês)