得到火炬(闪光)状态在android M中切换它

lot*_*ops 3 android android-camera android-6.0-marshmallow

我想实现切换火炬功能.因此,相机不会被捕获并崩溃 - 就像Lollipop一样 - 我正在尝试使用setTorchModeAPI 23.我有一个代码实现来打开或关闭火炬; 但是,我不知道如何检查闪光灯的当前状态.

CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
    String[] cameras = manager.getCameraIdList();
    for (int i = 0; i < cameras.length; i++) {
        CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameras[i]);
        boolean flashAvailable = characteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);
        if (flashAvailable) {
            boolean flashState = getFlashState(); //MISSING METHOD
            manager.setTorchMode(cameras[i], !flashState);

        }

    }

} catch (CameraAccessException e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

那么,如何在getFlashState不使用旧相机API的情况下实现?是否可以在不拍摄相机的情况下完成?

yeb*_*iah 5

你可以尝试使用

CameraManager.TorchCallback torchCallback = new TorchCallback() {
    @Override
    public void onTorchModeUnavailable(String cameraId) {
        super.onTorchModeUnavailable(cameraId);
    }

    @Override
    public void onTorchModeChanged(String cameraId, boolean enabled) {
        super.onTorchModeChanged(cameraId, enabled);
        flashState = enabled;
    }
};
Run Code Online (Sandbox Code Playgroud)

并注册回调

CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
    manager.registerTorchCallback(torchCallback, null);// (callback, handler)
Run Code Online (Sandbox Code Playgroud)

当你想打开/关闭闪光灯使用时

manager.setTorchMode(cameras[i], !flashState);
Run Code Online (Sandbox Code Playgroud)

记得取消注册回调...