完整讲解了android中camera的工作机制,代码分析。对了解整个android工作流程会有很大的帮助。
在这里定义的Camera类继承了活动Activity类,在它的内部,包含了一个android.hardware.Camera
publicclassCameraextendsActivityimplementsView.OnClickListener,SurfaceHolder.Callback{}
对Camera功能的一些调用如下所示:
mCameraDevice.takePicture(mShutterCallback,mRawPictureCallback,mJpegPictureCallback);mCameraDevice.startPreview();mCameraDevice.stopPreview();
startPreview、stopPreview和takePicture等接口就是通过JAVA本地调用(JNI)来实现的。frameworks/base/core/java/android/hardware/目录中的Camera.java文件提供了一个JAVA类:
Camera。
publicclassCamera{}
在这个类当中,大部分代码使用JNI调用下层得到,例如:publicvoidsetParameters(Parametersparams){
Log.e(TAG,"setParameters()");//params.dump();
native_setParameters(params.flatten());
}
再者,例如以下代码:
publicfinalvoidsetPreviewDisplay(SurfaceHolderholder){
setPreviewDisplay(holder.getSurface());
}
privatenativefinalvoidsetPreviewDisplay(Surfacesurface);
两个setPreviewDisplay参数不同,后一个是本地方法,参数为Surface类型,前一个通过调用后一个
实现,但自己的参数以SurfaceHolder为类型。
android.hardware.CameramCameraDevice;
3.2Camera的JAVA本地调用部分
Camera的JAVA本地调用(JNI)部分在frameworks/base/core/jni/目录的
android_hardware_Camera.cpp中的文件中实现。
android_hardware_Camera.cpp之中定义了一个JNINativeMethod(JAVA本地调用方法)类型的数组
gMethods,如下所示:
staticJNINativeMethodcamMethods[]={