Android Camera

在API21之前,使用的是android.hardware.Camera,21之后推荐使用的是android.hardware.camera2。作为学习,我们先了解下Camera API1。

使用android.hardware.Camera完成拍照,经历一下几步:

  1. 通过调用open(int)来得到一个Camera实例;

  2. 通过调用getParameters()来得到相机默认的设置;

  3. 如果需要的话,改变相机的设置选项并调用setParameters(Camera.Parameters)。
  4. 调用setDisplayOrientation(int)来确保预览的正确方向;
  5. 特别重要的一点:给 setPreviewDisplay(SurfaceHolder)传入一个初始化好的SurfaceHolder。没有surface,Camera将无法开始预览进行;
  6. 特别重要的一点:调用startPreview()方法开始更新预览画面。在你拍照前预览(Preview)必须启动;
  7. 当你想拍照的时候,调用 takePicture(Camera.ShutterCallback, Camera.PictureCallback, Camera.PictureCallback, Camera.PictureCallback)。等待回调(callbacks)提供真实图像数据;
  8. 拍照完成后,预览(preview)会被停止,为了继续拍照,需要再次调用startPreview();
  9. 调用stopPreview()来停止刷新预览画面;
  10. 为了让其他app使用Camera,我们需要调用release()来释放相机。我们的app应该在onPause()立刻释放相机,(在onResume()中重新调用open())

使用下面几步快速切换到录像模式(Video record)

  1. 像上面一样,得到并初始化一个Camera对象并且开始预览(start preview);
  2. 调用 unlock()方法允许媒体进程访问Camera;
  3. 将Camera传入setCamera(Camera);
  4. 完成录像的时候,调用reconnect()来重新获取并锁定Camera;
  5. 如果想要继续拍照或者录像,就要重新启动预览;
  6. 调用stopPreview()和release()。