web-dev-qa-db-fra.com

takePicture nécessite un exécuteur sur CameraX (1.0.0-alpha06)

Après la mise à jour de

androidx.camera:camera-core:1.0.0-alpha03

à

androidx.camera:camera-core:1.0.0-alpha06

les signatures des méthodes setTargetAspectRatio (dans ImageCaptureConfig.Builder) et takePicture (dans ImageCapture) ont été modifiées.

La documentation officielle et les informations sur le Web ne montrent pas comment utiliser de nouvelles méthodes (comment spécifier l'exécuteur).

Code cassé après la mise à jour:

...
val captureConfig = ImageCaptureConfig.Builder()
    .setTargetAspectRatioCustom(Rational(1, 1)) //this method changed
    .setFlashMode(flashMode)
    .setLensFacing(lensFacing)
    .build()

val capture = ImageCapture(captureConfig)

binding.takeAPhoto.setOnClickListener {
    ...
    val imageFile = createTempFile(System.currentTimeMillis().toString(), ".jpg")
    capture.takePicture(imageFile, object : ImageCapture.OnImageSavedListener { //this method also changed

        override fun onImageSaved(file: File) {
            ...
        }

        override fun onError(useCaseError: ImageCapture.UseCaseError, message: String, cause: Throwable?) {
            ...
        })
    }
}

Quelqu'un a-t-il (ou sait-il où trouver) des exemples d'utilisation de nouvelles méthodes? Merci d'avance

6
Peter Staranchuk

Vous devez uniquement exécuter la commande comme ci-dessous.

@Override
public void execute(Runnable command) {
    command.run(); // <-- THIS IS NEEDED
}
0
A Syed Fahad

Voici un journal des modifications pour les modifications dans alpha06: https://developer.Android.com/jetpack/androidx/releases/camera

  • La méthode setTargetAspectRatio() prend désormais AspectRatio enum avec la valeur 4_3 ou 16_9.
  • takePicture() la méthode prend (file, metadata, executor, imageSavedListener) // pourrait utiliser l'exécuteur selon votre cas/besoin. l'exemple est val executor = Executors.newSingleThreadExecutor()
  • au lieu de useCase.onPreviewOutputUpdateListener = utilisez useCase.setOnPreviewOutputUpdateListener()

FYI: CameraX sera en version bêta en décembre 2019

0
Himanshu Walia