android.hardware.Camera 路径:frameworks/base/core/java/android/hardware/Camera.java
作为承上启下的作用。一些底层接口释放给上层应用。
1、 CameraHolder
这个类是为了保持“android.hardware.Camera”的实例。
这是用于不同模块之间的切换。
这个类在Camera应用里,是典型的单例模式。
方法:
(1) public static synchronized CameraHolder instance() {
if (sHolder == null) {
sHolder = new CameraHolder();
}
return sHolder;
}
说明:创建单实例,如果实例sHolder 已经存在。那么就直接返回。否则就重新创建一个。
(2) 构造函数里面的语句
{
HandlerThread ht = new HandlerThread("CameraHolder");
ht.start();
mHandler = new MyHandler(ht.getLooper());
//获取Camera数量
mNumberOfCameras = android.hardware.Camera.getNumberOfCameras();
mInfo = new CameraInfo[mNumberOfCameras];
for (int i = 0; i < mNumberOfCameras; i++) {
mInfo[i] = new CameraInfo();
android.hardware.Camera.getCameraInfo(i, mInfo[i]);
}
// get the first (smallest) back and first front camera id
for (int i = 0; i < mNumberOfCameras; i++) {
if (mBackCameraId == -1 && mInfo[i].facing == CameraInfo.CAMERA_FACING_BACK) {
mBackCameraId = i;
} else if (mFrontCameraId == -1 && mInfo[i].facing == CameraInfo.CAMERA_FACING_FRONT) {
mFrontCameraId = i;
}
}
(3) Open 方法
通过语句:
mCameraDevice = CameraManagerFactory
.getAndroidCameraManager().cameraOpen(handler, cameraId, cb);
来调用android.hardware.Camera 打开Camera 设备。
(4) release()
关闭Camera的时候,调用release
2、 CameraManager 接口和AndroidCameraManagerImpl类
接口,为Camera设备提供操作的方法。这个接口的实现类是AndroidCameraManagerImpl
在这个接口里,只声明了一个方法。
public CameraProxy cameraOpen(
Handler handler, int cameraId, CameraOpenErrorCallback callback);
目的就是打开Camera设备。
在这个接口里面还声明多个内部的接口下面详细介绍。
3、 CameraProxy 接口 和AndroidCameraProxyImpl类
这个接口就是将对Camera 接受和发送的操作,送达到Camera设备。除了一些特殊的方法外,其他方法都是默认为异步操作。
这个接口的实现类是AndroidCameraProxyImpl,这个类属于AndroidCameraManagerImpl的内部类。在AndroidCameraManagerImpl.java 里面还有一个内部类CameraHandler,这个类属于Handler。在CameraHandler的handleMessage方法里,就是根据不同的消息参数来对android.hardware.Camera 进行控制。比如打开,释放,对焦,变焦等等
4、 CameraAFCallback 接口和AutoFocusCallback类
自动对焦回调的接口。此接口实现在PhotoModule类里面的内部类AutoFocusCallback实现。并且传给AndroidCameraProxyImpl的实例的autoFocus方法。然后调用CameraHandler 类里面的handleMessage方法,传给android.hardware.Camera 。
5、 CameraShutterCallback 接口 和 ShutterCallback 类
拍照的接口。
6、 CameraPictureCallback 接口和 PostViewPictureCallback,RawPictureCallback,JpegPictureCallback类
拍照后,将相片图片保存。