相机应用程序崩溃了一些设备?

时间:2011-11-01 15:39:16

标签: android camera

我有一个在android中拍照的应用程序。 它撞毁了一些设备。我将照片尺寸设置如下。 崩溃的原因是什么?

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h)
{
    Camera.Parameters parameters = camera.getParameters();
    List<Size> sizes = parameters.getSupportedPictureSizes();
    if (sizes == null || sizes.size() == 0)
    {
        parameters.setPreviewSize(w, h);
    } else
    {
        parameters.setPictureSize(sizes.get(0).width, sizes.get(0).height);
        for(Size s : sizes)
        {
            if( s.width < 700)
            {
                parameters.setPictureSize(s.width, s.height);
                break;
            }
        }
    }

    camera.setParameters(parameters);
    camera.startPreview();
}

2 个答案:

答案 0 :(得分:1)

伙计我知道这是一个老帖子,虽然我遇到了同样的问题,虽然这次一切都在三星和Nexus线上工作但不在HTC上(因为Sense肯定)。我为修复此问题所做的工作是遍历所有支持的大小并获得支持的大小。 事实上,当我尝试setParamters时崩溃,因为最大图片大小支持值。所以我做了一个循环遍历它的小方法并设置了设备接受的方法。

private void setCameraParameters() {
    if (camera != null) {
        mParameters = camera.getParameters();
        List<Camera.Size> sizes = mParameters.getSupportedPreviewSizes();
        Camera.Size selected = sizes.get(0);
        if (android.os.Build.MANUFACTURER.contains("HTC")) {
            getHTCBestSupportedResolution(sizes);
        }
        mParameters.setColorEffect(Camera.Parameters.EFFECT_MONO);
        mParameters.setJpegQuality(100);
        mParameters.setPreviewSize(selected.width, selected.height);
        mParameters.setRotation(90);
        mParameters.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO);
        mParameters.setPictureFormat(ImageFormat.JPEG);
        camera.setParameters(mParameters);
        camera.setDisplayOrientation(90);
        camera.startPreview();
    }
}


private void getHTCBestSupportedResolution(List<Camera.Size> sizes) {
    for (Size size : sizes) {
        try {
            mParameters.setPictureSize(size.width, size.height);
            camera.setParameters(mParameters);
            // Log.e("Size worked", size.width + " x " + size.height);
            break;
        } catch (Exception e) {
            continue;
        }
    }
}

现在它可以在所有设备上正常工作,根据经验,您可以删除比较HTC的条件,并让它适用于所有设备。 我希望这有助于那些面临同样问题的人。 感谢

答案 1 :(得分:0)

检查Logcat,我猜它崩溃了

camera.setParameters(parameters);

在某些设备上,某些报告的支持的分辨率似乎实际上并不受支持。您可以尝试查找所有设备都支持的旧版解决方案。或者捕获异常并尝试设置另一个分辨率。