Marshmallow 中的手电筒控制

2024-05-06

我对最新 Marshmallow 版本中的相机(更具体地说是手电筒)有疑问。 在任何棉花糖之前的版本上,我需要执行以下操作来打开/关闭闪光灯:

private void turnFlashOn(final Camera camera, int flashLightDurationMs) {
    if (!isFlashOn()) {
        final List<String> supportedFlashModes = camera.getParameters().getSupportedFlashModes();
        if (supportedFlashModes != null && supportedFlashModes.contains(Camera.Parameters.FLASH_MODE_TORCH)) {
            mParams.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
            camera.setParameters(mParams);
        }
    }
}

and

private void turnFlashOff(Camera camera) {
    if (camera != null) {
        final List<String> supportedFlashModes = camera.getParameters().getSupportedFlashModes();
        if (supportedFlashModes != null && supportedFlashModes.contains(Camera.Parameters.FLASH_MODE_OFF)) {
            mParams.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
            camera.setParameters(mParams);
        }
    }
}

不幸的是,棉花糖设备开始在野外崩溃。不知何故camera.getParameters() and camera.setParameters()开始失败并显示以下消息:

RuntimeException:getParameters 失败(空参数)

运行时异常:设置参数失败

我尝试在获取参数之前启动和停止预览,这不再引发错误。但是,当我打电话时,预览没有恢复camera.startPreview().

我担心释放相机并重新打开它是不可能的,因为这需要几秒钟的时间并且会产生糟糕的体验。

关于如何可靠地打开/关闭棉花糖中的手电筒有什么建议吗?


Google 在 OS 6 (Android M) 中引入了 torchmode。
如果您的目的只是打开/关闭闪光灯,下面的代码可以帮助您:

private static void handleActionTurnOnFlashLight(Context context){
    try{

        CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
        String[] list = manager.getCameraIdList();
        manager.setTorchMode(list[0], true);
    }
    catch (CameraAccessException cae){
        Log.e(TAG, cae.getMessage());
        cae.printStackTrace();
    }
}

private static void handleActionTurnOffFlashLight(Context context){
    try{
        CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
        manager.setTorchMode(manager.getCameraIdList()[0], false);
    }
    catch (CameraAccessException cae){
        Log.e(TAG, cae.getMessage());
        cae.printStackTrace();
    }
}

您所要做的就是:获取cameraid 的列表,其中相机ID 零(0) 是您要打开/关闭闪光灯的主相机。只需将cameraID 传递给setTochMode API,并使用布尔值来打开或关闭它。

请注意,这段代码仅适用于 OS 6,因此您需要检查设备操作系统,并根据该情况选择为 pre-marshmallow 设备调用哪些 API。

如果它解决了您的问题,请将此标记为解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Marshmallow 中的手电筒控制 的相关文章

随机推荐