Android:相机视图 - 当我不使用弃用的方法时,应用程序崩溃

Dee*_*eeV 6 crash android deprecated surfaceview android-camera

在我的应用程序中,我正在尝试设置相机.我的类扩展了SurfaceView并实现了SurfaceHolder.Callback方法.

这是我班上的一些内容:

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback{
    private SurfaceHolder mHolder;
    private Camera.Parameters cameraParameters;
    private Camera camera;

    public CameraPreview(Context context) {
        super(context);
        mHolder = this.getHolder();
        mHolder.addCallback(this);
        // If this is deprecated, why do I still need it?
        // It says deprecated, but app crashes when removed.
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        Camera.Parameters parameters = camera.getParameters();
        List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();

        Camera.Size previewSize = previewSizes.get(0);
        parameters.setPreviewSize(previewSize.width, previewSize.height);
        camera.setParameters(parameters);

        try {
            camera.stopPreview();
            camera.setPreviewDisplay(mHolder);
            camera.startPreview();
        } catch (IOException e) {
            e.printStackTrace();
        }   
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        camera = Camera.open();
        cameraParameters = camera.getParameters();
}

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        camera.stopPreview();
        camera.release();
        camera = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题涉及构造函数中的"setType"方法.API声明该方法已被弃用并被忽略.但是,如果我注释掉一行,则当我调用camera.startPreview()时整个应用程序崩溃.我想弄清楚为什么会这样.如果它被忽略了,那么我用该方法做什么并不重要.这意味着这种实现存在一些非常错误.

我正在运行Android 2.2软件.

任何帮助,将不胜感激.

Pra*_*rma 1

对于 Android 2.2 sdk,setType 方法并未被弃用,因为我已经使用过该方法。

所以其他场景可能会发生变化。

(1) 检查您导入的包是否为android.hardware.Camera。(2) 检查相机清单文件中添加的所有权限。