Intents d'appareils photo

Pour effectuer des actions de base sur l'appareil photo, comme prendre une photo ou enregistrer une vidéo à l'aide de l'application Appareil photo par défaut de l'appareil, vous n'avez pas besoin d'effectuer d'intégration avec une bibliothèque d'appareils photo. Utilisez plutôt un Intent.

Prendre une photo avec une application Appareil photo

Android délègue des actions à d'autres applications en appelant un Intent. Ce processus est composé de trois parties : l'Intent lui-même, un appel pour démarrer l'Activity externe et un code pour gérer les données d'image lorsque votre activité revient au premier plan.

Voici une fonction qui appelle un Intent pour prendre une photo.

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
    }
}

Enregistrer une vidéo avec une application Appareil photo

Vous pouvez également appeler un Intent pour enregistrer une vidéo.

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
    }
}

La méthode startActivityForResult() est protégée par une condition appelant resolveActivity(), qui renvoie le premier composant d'activité capable de gérer l'Intent. Effectuez cette vérification pour vous assurer que vous appelez un Intent qui n'entraînera pas le plantage de votre application.

Ressources supplémentaires

Pour les actions de base sur l'appareil photo, utilisez un Intent. Sinon, nous vous recommandons d'utiliser les bibliothèques Camera2 et CameraX pour les opérations plus complexes que la capture d'images ou l'enregistrement de vidéos de base.