Android: вид с камеры - приложение вылетает, когда я не использую устаревший метод - PullRequest
6 голосов
/ 10 июня 2011

В моем приложении я пытаюсь настроить камеру. Мой класс расширяет 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 Ответ

1 голос
/ 17 июня 2011

В Android 2.2 sdk метод setType не рекомендуется, поскольку я уже использовал его.

Так что могут быть изменения в других сценариях.

(1) Проверьте, что импортированный вами пакет - это android.hardware.Camera. (2) Проверьте все разрешения, добавленные в файл манифеста для камеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...