Держите фонарик включенным, пока камера открыта

Я хочу создать приложение, которое будет держать переднюю светодиодную вспышку / фонарик во время съемки. Итак, у меня есть следующий код, который открывает камеру с неявным намерением:

val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(intent, requestImageCapture)

И код для включения и выключения факела / вспышки телефона:

if(isLightOn) {
    val manager = getSystemService(Context.CAMERA_SERVICE) as CameraManager
    val cameraId = manager.cameraIdList[0]
    manager.setTorchMode(cameraId, false)
    isLightOn = false
} else {
    val manager = getSystemService(Context.CAMERA_SERVICE) as CameraManager
    val cameraId = manager.cameraIdList[0]
    manager.setTorchMode(cameraId, true)
    isLightOn = true
}

Я установил слушателям 2 кнопки для выполнения этих действий. Хотя они работают хорошо сами по себе, фонарик / вспышка не остается включенным, когда камера открывается с намерением. Есть ли способ, которым я могу добиться этого поведения?

1 ответ

Решение

Код для факела работает, но он работает только для вашего приложения. После startActivityForResult(intent, requestImageCapture) выполняется, вы больше не в вашем приложении. Вы находитесь в любом приложении камеры вы выбираете. Ваше приложение теряет доступ к камере, а приложение "Камера" получает его.

Теперь вспышкой можно управлять для приложения "Камера". Приложение камеры, вероятно, имеет элементы управления для вспышки.

Если вы хотите включить вспышку и сделать снимок, вам нужно будет создать собственное приложение для камеры. Вы можете сделать это с нуля, следуя этому руководству, или вы можете использовать библиотеку камеры, такую ​​как Fotoapparat или Material -Camera.

Другие вопросы по тегам