как избежать обновления экрана при смене режима flash в Android X

#android #android-camerax

#Android #android-camerax

Вопрос:

Я пытаюсь изменить режим flash, как показано ниже

 when {
    ImageCapture.FLASH_MODE_AUTO == imageCapture!!.flashMode -> {
        imageCaptureFlashMode = ImageCapture.FLASH_MODE_ON
        idFlashControl.setImageResource(R.drawable.ic_flash_on)
        startCamera()
    }
...
...
 

в startCamera () Я связываю варианты использования, как показано ниже

 cameraProvider?.unbindAll()
val cameraX = cameraProvider?.bindToLifecycle(
            this, cameraSelector, preview, imageCapture
        )
 

отмена привязки — это воссоздание поверхности. Итак, когда я меняю режим flash, экран становится черным и возвращается к жизни, как создается новое действие.

Как этого избежать?

Ответ №1:

Вам не нужно отменять / повторно привязывать варианты использования при изменении режима flash для варианта использования для захвата изображения. Когда вы устанавливаете режим flash FLASH_MODE_ON , последующие запросы на захват будут использовать flash (при условии, что устройство поддерживает flash).

 // Assuming the image capture has already been bound
imageCapture.flashMode = ImageCapture.FLASH_MODE_ON

// Assuming the flash unit is available, this capture request will use the flash
imageCapture.takePicture(...)
 

Комментарии:

1. У меня похожая проблема (воссозданная поверхность), но с режимом фокусировки. Чтобы установить фокус на бесконечность, я использую Camera2Interop.Extender и вызываю setCaptureRequestOption в previewBuilder. Если позже я захочу снова использовать автофокусировку, мне нужно воссоздать previewBuilder и повторно привязать вариант использования, который заставляет поверхность мигать. Есть ли решение для моего варианта использования?