Per eseguire azioni di base della fotocamera, come acquisire una foto o registrare un video, utilizzando l'applicazione fotocamera predefinita del dispositivo, non è necessario eseguire l'integrazione con una Raccolta della fotocamera. Utilizza invece una Intent
.
Scattare una foto con un'app Fotocamera
Android delega le azioni ad altre applicazioni richiamando un Intent
. Questo processo prevede tre parti: il Intent
stesso, una chiamata per avviare il Activity
esterno e un codice per gestire i dati dell'immagine quando lo stato attivo torna alla tua attività.
Ecco una funzione che richiama un Intent
per scattare 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 } }
Registrare un video con un'app Fotocamera
Puoi anche richiamare un Intent
per acquisire 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 } }
Il metodo startActivityForResult()
è protetto da una condizione che chiama resolveActivity()
, che restituisce il primo componente dell'attività in grado di gestire Intent
. Esegui questo controllo per assicurarti di richiamare un Intent
che non causerà l'arresto anomalo della tua app.
Risorse aggiuntive
Per le azioni di base della videocamera, usa un Intent
. In caso contrario, si consiglia di utilizzare le librerie Camera2 e CameraX per operazioni più complesse rispetto all'acquisizione di immagini o video di base.
- Pacchetto fotocamera CameraX
- Pacchetto fotocamera Camera2
- Progetti di esempio relativi alle videocamere