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

时间:2011-06-10 18:48:50

标签: android crash 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;
    }
}

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

我正在运行Android 2.2软件。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用Android 2.2 sdk setType方法不会弃用,因为我已经使用过它。

因此可能会有其他方案的变化。

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