启动相机预览时,叠加创建失败

Jos*_*ury 4 android

我正在尝试使用以下代码将相机预览绘制到SurfaceHolder上:

    @Override
    public void onCreate(SurfaceHolder surfaceHolder) {
        super.onCreate(surfaceHolder);

        Log.d(TAG, "Releasing camera first, just to make sure");
        releaseCamera();

        Log.d(TAG, "Opening Camera object.");
        mCamera = Camera.open();

        if (mCamera == null) {
            Log.d(TAG, "Camera is null.");
        }
    }

    @Override
    public void onSurfaceCreated(SurfaceHolder holder) {
        super.onSurfaceCreated(holder);
        Log.d(TAG, "Surface created.");

        try {
            if (holder == null) {
                Log.d(TAG, "SurfaceHolder is empty.");
            }

            Log.d(TAG, "Setting preview display.");
            mCamera.setPreviewDisplay(holder);

        } catch (IOException e) {
            Log.d(TAG, "IOException on setPreviewDisplay.");

            releaseCamera();
        }
    }


  @Override
    public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        super.onSurfaceChanged(holder, format, width, height);
        Log.d(TAG, "Surface changed.");

        Log.d(TAG, "Starting preview.");
        mCamera.startPreview();
    }
Run Code Online (Sandbox Code Playgroud)

但是,当我在模拟器或我的实际手机上运行应用程序时,我多次收到错误"Overlay create failed - retrying",然后是"Overlay Creation Failed!".然后我得到一个RuntimeException,说明"startPreview失败".

我已经阅读了示例代码,以及这里的许多相关问题,但没有运气.我还检查了权限,我认为这是正确的.有任何想法吗?

提前致谢.

don*_*ner 8

设置SurfaceHolder时,请尝试将类型设置为SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS:

SurfaceHolder holder = surfaceView.getHolder();
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
Run Code Online (Sandbox Code Playgroud)

surfaceView是SurfaceView的一个实例,它在我的布局中声明.