Как оставить фонарик включенным (программно) при включенном предварительном просмотре камеры - PullRequest
0 голосов
/ 11 января 2019

Итак, для моего приложения для Android я создал SurfaceView и назначил его для предварительного просмотра камеры и запуска предварительного просмотра камеры с использованием необходимых API. Но теперь я хочу включить фонарик (что-то вроде факела), пока работает предварительный просмотр.

Обратите внимание, что в Интернете я видел множество примеров того, как включить фонарик, и это работает, пока я не вызываю API открытой камеры. Ниже приведен код -

try
{
    CameraManager cameraManager = (CameraManager)context.GetSystemService(Context.CameraService);
    if (cameraManager != null)
    {
        //for the sake of brevity, hardcoded the camera id. 0 is mostly back camera
        cameraManager.SetTorchMode(0, true); 
    }
}
catch (CameraAccessException e)
{
   LogUtil.Error("CameraInput", e.ToString());
} 

Обратите внимание, что я тестирую на Android N, и, следовательно, приведенный выше код работает безупречно. Но как только я позвоню ниже строки кода, вспышка выключится.

Camera camera = Camera.Open(0);
// ...... some code  ....//
camera.StartPreview();

Когда выполняются две вышеуказанные строки, вспышка гаснет. Является ли это известным поведением, например, когда камера использует исключительную блокировку на оборудовании со вспышкой и сбрасывает ее значение по умолчанию.

Я попытался изменить приведенный выше код, т.е. сначала вызывать API-интерфейс Camera Open, а затем настраивать вспышку. На этом я получаю CameraAccessException, камера уже используется.

Чего мне не хватает?

1 Ответ

0 голосов
/ 11 января 2019

Попробуйте при предварительном просмотре SurfaceView

params = camera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_ON);
camera.setParameters(params);

Помните, что Если вы хотите использовать его в качестве фонарика, вы можете сделать:

parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);

Если нет, чтобы включить вспышку, которая будет срабатывать при съемке, вы используете:

parameters.setFlashMode(Camera.Parameters.FLASH_MODE_ON);

Удачного кодирования!

...