如何使用camera2 API控制相机闪光灯

时间:2015-07-17 01:36:31

标签: flash camera galaxy flashlight

我想使用camera2 API控制智能手机(Galaxy s6)的闪光灯。

我检查过它可以通过这样的代码获得,

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不可用。

当然,我在清单中声明了权限和硬件功能。

使用此设备或camera2 API无法控制闪光灯吗?

1 个答案:

答案 0 :(得分:2)

您正在检查第二台相机(可能是前置相机)是否有闪光灯,因为您在第4行获取了cameraId [1]而不是cameraId [0]的相机特性。

通常情况下,后置摄像头是第一个,也是带闪光灯的摄像头。 为了最强大,迭代所有摄像机ID并检查它们中是否有闪光灯。