intenti fotocamera

Per eseguire azioni di base della fotocamera, come scattare una foto o registrare un video utilizzando l'applicazione Fotocamera predefinita del dispositivo, non è necessaria l'integrazione con una libreria di fotocamere. Utilizza invece un Intent.

Scattare una foto con un'app fotocamera

Android delega le azioni ad altre applicazioni richiamando un Intent. Questo processo prevede tre componenti: l'Intent stesso, una chiamata per avviare l'Activity esterno e del codice per gestire i dati delle immagini quando il focus torna alla tua attività.

Ecco una funzione che richiama un Intent per acquisire 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 usare 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à arresti anomali dell'app.

Risorse aggiuntive

Per le azioni di base della fotocamera, utilizza un Intent. In caso contrario, è consigliabile utilizzare le librerie Camera2 e CameraX per qualsiasi operazione più complessa dell'acquisizione di immagini o video di base.