在我的应用中,我正在尝试设置相机。我的类扩展了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软件。
任何帮助都将不胜感激。
答案 0 :(得分:1)
使用Android 2.2 sdk setType方法不会弃用,因为我已经使用过它。
因此可能会有其他方案的变化。
(1)检查您导入的包是android.hardware.Camera。 (2)检查相机清单文件中添加的所有权限。