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层的交互,主要使用回调,也就是接口。

更多相关文章

  1. 如何使用 sqlite3 访问 Android 手机的数据库
  2. Android中使用代码控制Wifi及数据连接网络开关
  3. android下的数据存储
  4. android Sqlite数据库对象模型ORMLite框架学习
  5. Android Studio自动化快速实现Parcelable接口序列化
  6. Android 接口定义语言AIdl
  7. Android中通过EventBus传递消息数据
  8. adb shell下查看sqlite数据库

随机推荐

  1. 细说dex2oat(3)
  2. Activiy或者Fragment 销毁时,Dialog 的正
  3. UI控件--自定义SeekBar样式
  4. Android之apk文件签名——keytool 和 jar
  5. 开发规范真的很重要
  6. No instrumentation runner found for th
  7. 【Android】利用Strings资源文件来格式化
  8. Android(安卓)sd存储总结
  9. 【Tech-Android-View】Android4.0的横竖
  10. Android(安卓)搭建MVP+Retrofit+RxJava网