在API21之前,使用的是android.hardware.Camera,21之后推荐使用的是android.hardware.camera2。作为学习,我们先了解下Camera API1。
使用android.hardware.Camera完成拍照,经历一下几步:
通过调用open(int)来得到一个Camera实例;
通过调用getParameters()来得到相机默认的设置;
- 如果需要的话,改变相机的设置选项并调用setParameters(Camera.Parameters)。
- 调用setDisplayOrientation(int)来确保预览的正确方向;
- 特别重要的一点:给 setPreviewDisplay(SurfaceHolder)传入一个初始化好的SurfaceHolder。没有surface,Camera将无法开始预览进行;
- 特别重要的一点:调用startPreview()方法开始更新预览画面。在你拍照前预览(Preview)必须启动;
- 当你想拍照的时候,调用 takePicture(Camera.ShutterCallback, Camera.PictureCallback, Camera.PictureCallback, Camera.PictureCallback)。等待回调(callbacks)提供真实图像数据;
- 拍照完成后,预览(preview)会被停止,为了继续拍照,需要再次调用startPreview();
- 调用stopPreview()来停止刷新预览画面;
- 为了让其他app使用Camera,我们需要调用release()来释放相机。我们的app应该在onPause()立刻释放相机,(在onResume()中重新调用open())
使用下面几步快速切换到录像模式(Video record)
- 像上面一样,得到并初始化一个Camera对象并且开始预览(start preview);
- 调用 unlock()方法允许媒体进程访问Camera;
- 将Camera传入setCamera(Camera);
- 完成录像的时候,调用reconnect()来重新获取并锁定Camera;
- 如果想要继续拍照或者录像,就要重新启动预览;
- 调用stopPreview()和release()。