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