Camera.setPreviewDisplay()抛出异常[重复](Camera.setPrevi

2019-07-29 07:37发布

可能重复:
Android相机将无法正常工作。 startPreview失败

我想设置一个自定义的SurfaceView相机预览但每次我执行初始化方法时,我得到一个异常。

下面是摄像头预览初始化代码:

private void init(Context context)
{
    setFocusable(true);
    mRecording = false;
    fileRW = new FileReaderWriter();
    frameCount = 0;
    if(mCamera == null)
    {
        mCamera = Camera.open();
    }
    Parameters parameters = mCamera.getParameters();
    parameters.setPictureFormat(PixelFormat.JPEG);
    mCamera.setParameters(parameters);
    try {
        mCamera.setPreviewDisplay(surfaceHolder);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    mCamera.startPreview();

}

mCamera.setPreviewDisplay(surfaceHolder); 抛出一个异常( setPreviewDisplay failed )每次我试图执行的方法。

有谁知道什么地方出错了? 我真的很感激您的帮助。

谢谢!`

Answer 1:

我完全乔恩明亮的同意

我无法弄清楚发生了什么事情了一个星期,我忽略了的setType的表面支架,因为SDK说,这是过时,即。

“此方法已被弃用,这是忽略,该值在需要时自动设置”。

但是,如果你不这样做,它会崩溃的setPreview。 这是在Galaxy S的运行1.5 SDK(我需要它给向后兼容)2.1。 因此,请确保您设置的类型。 不太自动为文档使它听起来。



Answer 2:

最好的地方打电话setPreviewDisplay()是在surfaceChanged()如果刚刚创建的表面,surfaceChanged将至少调用一次,你可以startPreview()和setPreviewDisplay那里。 如果表面的变化和预览已经开始,你可以stopPreview/setPreviewDisplay/startPreview那里。 即使您的应用程序不会改变表面的大小,框架仍可能意外调用surfaceChanged()时,应用程序启动时或由于方向改变退出。 所以,你的应用程序确实需要妥善处理surfaceChanged。 您可以跟踪相机应用程序的源代码,在Android中以供参考。

在另一个答案的代码片段工作,如果surfaceChanged()在应用程序的生命周期只调用一次。



文章来源: Camera.setPreviewDisplay() throws Exception [duplicate]