静默拍照,不需要相机预览,可以在后台完成拍照并保存。 可用于人脸验证解锁。
一、首先需要了解一下相机开发相关知识。相机开发有两个重要的系统类:
- 1、Camera.java (android.hardware.Camera)
- 2、SurafaceView.java (android.view.SurafaceView)
1.2 Surface、SurfaceView、SurfaceHolder的关系
Surface是用来处理屏幕内容合成器所管理的原始缓存区的工具,它通常由图像缓冲区的消费者创建(如SurfaceTexture、MediaRecorder),然后被移交到生产者(如MediaPlayer)。
SurfaceHolder 一个抽象接口,给持有Surface的对象使用,它可以控制Surface的大小和格式,编辑Surface的像素,以及监听Surface的变化。 这个接口通常通过SurfaceView获得。
SurfaceHolder.Callback有三个回调方法:
- surfaceCreated()
- surfaceChanged()
- surfaceDestroyed()
SurfaceView 提供了嵌入式图层的专用Surface。可以控制Surface的格式和大小,SurfaceView负责把Surface显示在屏幕的正确位置。
SurfaceView继承自View,用于在屏幕上面显示相机的预览画面。
SurfaceView中有两个对象,一个是Surface,一个是SurfaceHolder,我们可以通过getHolder()方法,获得当前SurfaceView的SurfaceHolder对象,通过SurfaceHolder的回调,可以知道surface的状态。
1.3 Camera
Camera类的接口和方法有很多,一个最简单的Camera应用的实现:
// 在surfaceCreated()中
Camera mCamera = Camera.open(0);
Camera.Parameters mParameters = mCamera.getParameters();
mParameters.setPreviewSize(640, 480);
mParameters.setPictureSize(640, 480);
mCamera.setParameters