Итак, для моего приложения для 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
, камера уже используется.
Чего мне не хватает?