异常 java.lang.RuntimeException:setParameters 失败。

5
我遇到了以下错误:
Exception java.lang.RuntimeException: setParameters failed
android.hardware.Camera.native_setParameters (Camera.java)
android.hardware.Camera.setParameters (Camera.java:1946)

在下面的代码中,我不知道自己在做什么错了。
        Camera mCamera = Camera.open();
        Parameters params = mCamera.getParameters();

        if (params.getFlashMode() != null)
            params.setFlashMode(Parameters.FLASH_MODE_OFF);

        if (nightMode && params.getSceneMode() != null)
            params.setSceneMode(Parameters.SCENE_MODE_NIGHT);

        if (params.getSupportedFocusModes().contains(Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
            params.setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
        } else if (params.getSupportedFocusModes().contains(Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {
            params.setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
        } else if (params.getSupportedFocusModes().contains(Camera.Parameters.FOCUS_MODE_INFINITY)) {
            params.setFocusMode(Parameters.FOCUS_MODE_INFINITY);
        }

        mCamera.setParameters(params);

这个错误通常在像三星这样的设备上发生。 请求帮助。谢谢。

2个回答

6

您的参数可能不受设备支持。您可以使用Camera.Parameters类的getSupportedFocusModes方法检测可用的对焦模式。如果某个模式不包含在此列表中,则无法将其设置为相机。

编辑

如Alex在评论中所说,您可以在logcat中查看错误消息。


2
其他参数也是如此。在某些设备上,事情可能会变得非常奇怪,比如选择场景模式可能会与对焦模式相矛盾等。在没有经过特别验证的设备上安全驾驶的唯一方法是始终在setParameters()中捕获RuntimeException,并立即调用getParameters(),因为setParameters()也可能会悄悄失败。有时,logcat(用于系统相机服务)可以给您一个关于出了什么问题的提示。 - Alex Cohn
你说得对,我正在实时设备上测试这个解决方案。验证后我一定会将其标记为已接受的。 - SimpleCoder

1

您需要检查用户设备是否支持焦点模式,不是所有设备都具有相机焦点模式,您可以这样做:

    public boolean support_focus(Camera camera){
     Camera.Parameters parameters = camera.getParameters();
     List<String> focusModes = parameters.getSupportedFocusModes();
     if (focusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO))
         return true;
     else
         return false;
    }

这个检查设备是否支持FOCUS_MODE_AUTO,将其更改为您想要的参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接