Как управлять вспышкой камеры с помощью camera2 API

Я хочу управлять вспышкой смартфона (Galaxy s6) с помощью camera2 API.

Я проверил это доступно по кодам, как это,

try {
    CameraManager mManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
    String [] cameraId = mManager.getCameraIdList();
    CameraCharacteristics cameraCharacteristics = mManager.getCameraCharacteristics(cameraId[1]);
    Toast.makeText(getApplicationContext(),cameraId[0]+cameraId[1],Toast.LENGTH_LONG).show();
    boolean flashAvailable = cameraCharacteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);
    if (flashAvailable) {
        mManager.openCamera(cameraId[0], new MyStateCallback(), null);
        Toast.makeText(getApplicationContext(),"Flash is available",Toast.LENGTH_LONG).show();
    } else {
        //todo: throw Exception
        Toast.makeText(getApplicationContext(),"Flash is not available",Toast.LENGTH_LONG).show();
    }
} catch (Exception e) {
    e.printStackTrace();
}

Но, Toast сообщение: Flash не доступен.

Конечно, я объявил разрешения и аппаратные функции в манифесте.

Разве невозможно управлять вспышкой с помощью этого устройства или API Camera2?

1 ответ

Вы проверяете, имеет ли вторая камера (вероятно, передняя) вспышку, потому что вы получаете характеристики камеры для cameraId[1] вместо cameraId[0] в 4-й строке.

Как правило, камера, обращенная назад, является первой, и она со вспышкой. Чтобы быть максимально устойчивым, переберите все идентификаторы камеры и проверьте, есть ли у них вспышка.

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