【问题标题】:Samsung Galaxy S5 Camera Torch not working三星 Galaxy S5 相机手电筒不工作
【发布时间】:2015-01-26 23:23:31
【问题描述】:

我们的应用程序适用于我们所有支持的 Android 手机“三星 Galaxy S5 除外”。我们的应用程序使用相机近距离拍照。 在我们专注于拍照的整个过程中,我们需要开启手电筒模式。我们检查支持的参数并设置支持的值。

参数已设置,但事件要么永远不会被触发,要么相机忽略我的设置。我使用 OpenCamera 进行了测试,他们的应用程序能够打开手电筒,但我找不到我设置参数的方式与他们设置参数的方式之间的区别。

这是我们的代码:

//Set all camera parameters(flash, focus, white balance, etc)
private void setCameraParameters()
{
    //Rotate the orientation of the preview to match orientation of device
    camera.setDisplayOrientation(getCameraRotation());

    //A Parameters object must be used to set the other parameters.
    Parameters params = camera.getParameters();

        //Flash Mode to Torch if supported
        if(params.getSupportedFlashModes().contains("torch"))
        {
            // Torch mode
            params.setFlashMode(Parameters.FLASH_MODE_TORCH);
        }

        //Focus Mode to Macro if supported, Auto if not
        if(params.getSupportedFocusModes().contains("macro"))
        {
            //Macro focus mode
            params.setFocusMode(Parameters.FOCUS_MODE_MACRO);
        }
        else
        {
            //Auto focus mode
            params.setFocusMode(Parameters.FOCUS_MODE_AUTO);
        }


        //White Balance mode to Auto if available.
        List<String> supported_white = params.getSupportedWhiteBalance();
        if(supported_white!=null)
        {
            if(supported_white.contains("auto"))
            {
                params.setWhiteBalance(Parameters.WHITE_BALANCE_AUTO);
            }
        }

        // Auto Exposure Lock to false if available 
        if(params.isAutoExposureLockSupported())
        {
            params.setAutoExposureLock(false);
        }

        // Auto White Balance Lock if available. 
        if(params.getAutoWhiteBalanceLock())
        {
            params.setAutoWhiteBalanceLock(false);
        }

        //JPEG quality set to 100(highest)
        {
            params.setJpegQuality(100);
        }

        //Set focus area and metering area
        List<Camera.Area> focusArea = calculateFocusArea();
        params.setFocusAreas(focusArea);
        params.setMeteringAreas(focusArea);
        Camera.Size size = pickCameraSize(params.getSupportedPictureSizes());
        params.setPictureSize(size.width, size.height);

    //Set new parameters for camera
    camera.setParameters(params);

    boolean torch = getTorchState(camera);
}

// Added this method from zxing github to see if the value is being set
boolean getTorchState(Camera camera) {
    if (camera != null) {
        Camera.Parameters parameters = camera.getParameters();
        if (parameters != null) {
            String flashMode = camera.getParameters().getFlashMode();
            return flashMode != null
                    && (Camera.Parameters.FLASH_MODE_ON.equals(flashMode) || Camera.Parameters.FLASH_MODE_TORCH
                            .equals(flashMode));
        }
    }
    return false;
}

【问题讨论】:

  • 添加了检查手电筒状态的方法。它已设置,即使它没有打开。在本机相机应用程序中,手电筒在设置时确实会亮起。所以,现在我正在查看 Google 代码。仍然希望有人会提供一些有用的信息。 :-)

标签: android android-camera params


【解决方案1】:

我做的有点不同..也许它会帮助你!

                params = getCamera().getParameters();
    ...

                //Check if device supports torch mode, If YES then enable
                List<String> supportedFlashModes = params.getSupportedFlashModes();
                if (supportedFlashModes != null && supportedFlashModes.contains(Parameters.FLASH_MODE_TORCH)){
                    params.setFlashMode(Parameters.FLASH_MODE_TORCH);
                    torchModeOn  = true;
                }
...

                getCamera().setParameters(params);

相比之下,我使用的是 Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE 而不是 setFocusAreas、setMeteringArea、setAutoWhiteBalanceLock、setWhiteBalance 或 setAutoExposureLock。

看到您的代码后,我尝试单独合并每个代码,看看它是否会更好地影响我的图片,但没有运气。 (我的应用也需要特写图片。

Parameters.FOCUS_MODE_MACRO 在我尝试过的任何设备上都无法正常工作..

编辑:

这是我设置相机的顺序,以防万一……

        setCameraDisplayRotation();

        params = getCamera().getParameters();

        setFocusMode();

        //Check if device supports torch mode, If you YES then set on
        List<String> supportedFlashModes = params.getSupportedFlashModes();
        if (supportedFlashModes != null && supportedFlashModes.contains(Parameters.FLASH_MODE_TORCH)){
            params.setFlashMode(Parameters.FLASH_MODE_TORCH);
            torchModeOn  = true;
        }

        setImageResolution();

        getCamera().setParameters(params); // update params before preview.setCamera
        preview.setCamera(getCamera());   

        //... some custom code for determining the current screens available space for the preview

        params.setPreviewSize(size.width, size.height);

        if(setHiddenParameter(params, "zsl-values", "zsl", "on")){
            setUsingZsl(true);
        };

        getCamera().setParameters(params); //update params after preview init

【讨论】:

  • 嗯!我们可以使用微距模式。相机参数显示闪光灯模式为手电筒,但相机没有响应。您是否将闪光模式更改为“在”加载预览后的手电筒?我尝试更改顺序,但没有奏效。我想知道是否存在时间问题。
  • 我编辑了回复以包括我配置相机的顺序,以防它对您有所帮助。我无法通过点击或拍摄照片来聚焦微距模式,但是在 ZSL 曝光后我没有再尝试过。
【解决方案2】:

您必须在 Android Lollipop 中使用新的 camera2 API

Sample Code github

developer site

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-19
    • 2015-10-07
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 2015-09-04
    相关资源
    最近更新 更多