web-dev-qa-db-fra.com

Comment la bibliothèque CameraX peut-elle allumer / éteindre la torche?

Je développe une fonctionnalité avec la possibilité de basculer la torche dans des états ON/OFF. Il y a quelques jours, nous avons vu une nouvelle bibliothèque de Google en io2019 . J'ai eu une idée, pourquoi ne pas l'utiliser.

Après un certain temps, je ne vois aucune possibilité d'utiliser la seule torche de la bibliothèque.

Même dans la documentation officielle, je n'ai pas pu trouver de bonnes informations pour moi, de plus, l'exemple d'application de leur n'a pas non plus à gérer mon cas.

Avez-vous quelque chose en tête qui est facile à mettre en œuvre ou peut-être savez-vous comment le faire avec CameraX?

J'ai peur d'utiliser camera ou camera2 car la quantité de code à coller est terrible.

Liens :

[1] https://developer.Android.com/training/camerax

[2] https://proandroiddev.com/Android-camerax-preview-analyze-capture-1b3f403a9395

[3] https://github.com/Android/camera/tree/master/CameraXBasic

[4] https://github.com/Android/camera/tree/master/CameraXBasic

CameraX est une Android Jetpack qui a été construite dans le but de faciliter le développement de la caméra.

9

Je ne peux pas commenter, donc je réponds pour développer la réponse de yevhen_69.

La définition de enabledTorch (true) ne fonctionnait pas non plus pour moi, mais j'ai trouvé que je devais définir enableTorch (true) après l'appel à CameraX.bindToLifecycle

val previewConfig = PreviewConfig.Builder().apply {
        setLensFacing(lensFacing)
        // Any setup
        setTargetRotation(viewFinder.display.rotation)
}.build()

val preview = Preview(previewConfig)

CameraX.bindToLifecycle(this, preview)
preview.enableTorch(true)

Cependant, sur une note secondaire, CameraX est toujours en Alpha, il est donc conseillé d'utiliser toujours l'API Camera2.

8
Iain Stanford
androidx.camera:camera-core:1.0.0-alpha06

La nouvelle version de CameraX offre ces fonctionnalités. CameraInfo ajouté avec les API Check Flash Available et Sensor Rotation, référez-vous link

try {
    CameraInfo cameraInfo = CameraX.getCameraInfo(currentCameraLensFacing);
    LiveData<Boolean> isFlashAvailable = cameraInfo.isFlashAvailable();
    flashToggle.setVisibility(isFlashAvailable.getValue() ? View.VISIBLE : View.INVISIBLE);
} catch (CameraInfoUnavailableException e) {
    Log.w(TAG, "Cannot get flash available information", e);
    flashToggle.setVisibility(View.VISIBLE);
}
3
Akshay Raiyani
val previewConfig = PreviewConfig.Builder().apply {
            setLensFacing(lensFacing)
            // Any setup
            setTargetRotation(viewFinder.display.rotation)
}.build()

val preview = Preview(previewConfig)

preview.enableTorch(true)
2
yevhen_69
1
Rémi Latapy
androidx.camera:camera-core:1.0.0-alpha10

Vous pouvez vérifier si la torche est disponible ou non avec ceci:

val camera = cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, preview, imageAnalyzer)

camera.cameraInfo.hasFlashUnit()

Et vous pouvez activer la torche avec:

camera.cameraControl.enableTorch(true)
0
murgupluoglu

C'est une façon de le faire (Kotlin). S'il y a une meilleure façon, faites-le moi savoir. Le code suivant suppose que vous avez déjà établi la disponibilité de la mémoire flash sur l'appareil.

Déclarer une var flashMode

private var flashMode: Int = ImageCapture.FLASH_MODE_OFF

Dans updateCameraUI, définissez un écouteur

controls.findViewById<ImageButton>(R.id.flash_button).setOnClickListener {
    when (flashMode) {
        ImageCapture.FLASH_MODE_OFF ->
            flashMode = ImageCapture.FLASH_MODE_ON
        ImageCapture.FLASH_MODE_ON ->
            flashMode = ImageCapture.FLASH_MODE_AUTO
        ImageCapture.FLASH_MODE_AUTO ->
            flashMode = ImageCapture.FLASH_MODE_OFF
    }
    // Re-bind use cases to include changes
    bindCameraUseCases()
}

Dans bindCameraUseCases, définissez le mode flash

            imageCapture = ImageCapture.Builder()
                .setCaptureMode(ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY)
                .setTargetAspectRatio(screenAspectRatio)
                .setTargetResolution(screenSize)
                .setTargetRotation(rotation)
                .setFlashMode(flashMode)
                .build()
0
Knight Forked