既然已经建立了活动及预览Surface,现在我们准备好开始使用实际的Camera对象。
当创建Surface时,由于SurfaceHolder.Callback的存在,它将在代码中的触发调用surfaceCreated方法。此时可以通过调用Camera类上的静态方法open获得Camera对象。
Camera camera;
public void surfaceCreated(SurfaceHolder holder) {
camera = Camera.open();
随后,我们想要将预览显示设置为正在使用的SurfaceHolder,它通过回调提供给我们的方法。需要将该方法包装在try...catch块中,因为它可能会抛出IOException。如果发生了这种情况,那么我们会希望释放该Camera对象;否则,它将绑定摄像头的硬件资源,使其不能用于其他应用程序。
try
{
camera.setPreviewDisplay(holder);
}
catch (IOException exception)
{
camera.release();
}
最后,启动摄像头预览。
camera.startPreview();
}
相应地,在surfaceDestroyed中也需要释放该Camera对象。我们将首先调用stopPreview,以确保应该释放的资源都被清理。
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
camera.release();
}
运行这段代码,您可能会发现预览有些奇怪。它会逆时针旋转预览图像90°,如图2-1所示。