app层和framework层交互:
./frameworks/base/core/java/android/hardware/Camera.java
拍照过程framework层和APP层的交互流程,在takePicture()方法的注释里做了详细解释:
总结一下:拍照过程中Camera service 会初始一些Callbacks,在应用中实现这些callback的接口方法,
这个方法同样的可以触发播放声音的线程。
注册回调函数:
public final void takePicture(ShutterCallback shutter, PictureCallback raw,
PictureCallback postview, PictureCallback jpeg) {
...
}
处理回函数数据:
public void handleMessage(Message msg) {
switch(msg.what) {
case CAMERA_MSG_SHUTTER: //有数据到达通知
case CAMERA_MSG_RAW_IMAGE: //处理未压缩照片函数
case CAMERA_MSG_COMPRESSED_IMAGE: //处理压缩处理的照片函数
if (mJpegCallback != null) {
mJpegCallback.onPictureTaken((byte[])msg.obj, mCamera);
}
return ;
case CAMERA_MSG_PREVIEW_FRAME: //处理预览数据函数
...
}
应用实例化回调的接口:
回到目录:packages/apps/Camera/src/com/android/camera/CameraManager.java
private android.hardware.Camera mCamera;
mCameraDevice.takePicture(mShutterCallback, mRawPictureCallback,
mPostViewPictureCallback, new JpegPictureCallback(loc));
应用回调的接口,获取数据流程:
目录:packages/apps/Camera/src/com/android/camera/Camera.java
private final class JpegPictureCallback implements PictureCallback {
public void onPictureTaken(
final byte [] jpegData, final android.hardware.Camera camera) {
...
mImageCapture.storeImage(jpegData, camera, mLocation);
mImageSaver.addImage(jpegData, uri, title, mLocation,
width, height, mThumbnailViewWidth, orientation);
...
}
}
packages/apps/Camera/src/com/android/camera/Camera.java 的内部类ImageSaver开启一个线程来存储图片
private class ImageSaver extends Thread {
将数据存放入数据库
}
以上是App层也framework层的交互,主要使用回调,也就是接口。
./frameworks/base/core/java/android/hardware/Camera.java
拍照过程framework层和APP层的交互流程,在takePicture()方法的注释里做了详细解释:
总结一下:拍照过程中Camera service 会初始一些Callbacks,在应用中实现这些callback的接口方法,
这个方法同样的可以触发播放声音的线程。
注册回调函数:
public final void takePicture(ShutterCallback shutter, PictureCallback raw,
PictureCallback postview, PictureCallback jpeg) {
...
}
处理回函数数据:
public void handleMessage(Message msg) {
switch(msg.what) {
case CAMERA_MSG_SHUTTER: //有数据到达通知
case CAMERA_MSG_RAW_IMAGE: //处理未压缩照片函数
case CAMERA_MSG_COMPRESSED_IMAGE: //处理压缩处理的照片函数
if (mJpegCallback != null) {
mJpegCallback.onPictureTaken((byte[])msg.obj, mCamera);
}
return ;
case CAMERA_MSG_PREVIEW_FRAME: //处理预览数据函数
...
}
应用实例化回调的接口:
回到目录:packages/apps/Camera/src/com/android/camera/CameraManager.java
private android.hardware.Camera mCamera;
mCameraDevice.takePicture(mShutterCallback, mRawPictureCallback,
mPostViewPictureCallback, new JpegPictureCallback(loc));
应用回调的接口,获取数据流程:
目录:packages/apps/Camera/src/com/android/camera/Camera.java
private final class JpegPictureCallback implements PictureCallback {
public void onPictureTaken(
final byte [] jpegData, final android.hardware.Camera camera) {
...
mImageCapture.storeImage(jpegData, camera, mLocation);
mImageSaver.addImage(jpegData, uri, title, mLocation,
width, height, mThumbnailViewWidth, orientation);
...
}
}
packages/apps/Camera/src/com/android/camera/Camera.java 的内部类ImageSaver开启一个线程来存储图片
private class ImageSaver extends Thread {
将数据存放入数据库
}
以上是App层也framework层的交互,主要使用回调,也就是接口。