第三部分 Camera的主要实现分析

3。1 JAVA程序部分

在packages/apps/Camera/src/com/android/camera/ 目录的Camera。java文件中,包含了对Camera的调用

在Camera。java中包含对包的引用:

import android。hardware。Camera。PictureCallback;

import android。hardware。Camera。Size;

在这里定义的Camera类继承了活动Activity类,在它的内部,包含了一个 android。hardware。Camera

public class Camera extends Activity implements View。OnClickListener, SurfaceHolder。Callback {             android。hardware。Camera mCameraDevice;

}

对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。

public class Camera {

}

在这个类当中,大部分代码使用JNI调用下层得到,例如:

public void setParameters(Parameters params) {

Log。e(TAG, "setParameters()");

//params。dump();

native_setParameters(params。flatten());

}

再者,例如以下代码:

public final void setPreviewDisplay(SurfaceHolder holder) {

setPreviewDisplay(holder。getSurface());

}

private native final void setPreviewDisplay(Surface surface);

两个setPreviewDisplay参数不同,后一个是本地方法,参数为Surface类型,前一个通过调用后一个实现,但自己的参数以SurfaceHolder为类型。

3。2 Camera的JAVA本地调用部分

Camera的JAVA本地调用(JNI)部分在frameworks/base/core/jni/目录的android_hardware_Camera。cpp中的文件中实现。

android_hardware_Camera。cpp之中定义了一个JNINativeMethod(JAVA本地调用方法)类型的数组gMethods,如下所示:

static JNINativeMethod camMethods[] = {

{"native_setup","(Ljava/lang/Object;)V",(void*)android_hardware_Camera_native_setup },

{"native_release","()V",(void*)android_hardware_Camera_release },

{"setPreviewDisplay","(Landroid/view/Surface;)V",(void *)android_hardware_Camera_setPreviewDisplay },

{"startPreview","()V",(void *)android_hardware_Camera_startPreview },

{"stopPreview", "()V", (void *)android_hardware_Camera_stopPreview },

{"setHasPreviewCallback","(Z)V",(void *)android_hardware_Camera_setHasPreviewCallback },

{"native_autoFocus","()V",(void *)android_hardware_Camera_autoFocus },

{"native_takePicture", "()V", (void *)android_hardware_Camera_takePicture },

{"native_setParameters","(Ljava/lang/String;)V",(void *)android_hardware_Camera_setParameters },

{"native_getParameters", "()Ljava/lang/String;",(void *)android_hardware_Camera_getParameters }

};

JNINativeMethod的第一个成员是一个字符串,表示了JAVA本地调用方法的名称,这个名称是在JAVA程序中调用的名称;第二个成员也是一个字符串,表示JAVA本地调用方法的参数和返回值;第三个成员是JAVA本地调用方法对应的C语言函数。

register_android_hardware_Camera 函数将gMethods注册为的类"android/media/Camera",其主要的实现如下所示。

int register_android_hardware_Camera(JNIEnv *env)

{

// Register native functions

return AndroidRuntime::registerNativeMethods(env, "android/hardware/Camera",

camMethods, NELEM(camMethods));

}

"android/hardware/Camera"对应JAVA的类android。hardware。Camera。

android camera fragment,Android Camera 模块分析(三)相关推荐

  1. android onclick fragment,Android Fragment onClick按钮方法

    我试图调用我的onClick(View v)XML中的方法,但不能使用Fragment.这是错误. 01-17 12:38:36.840: E/AndroidRuntime(4171): java.l ...

  2. android add fragment,Android中使用FragmentTransaction对象的add方法后应用闪退

    想在activity中进行fragment的设置和替换.setDefaultFragment()方法中,使用transaction.add(R.id.layFrame, MapsFragment.ne ...

  3. android 关闭fragment,android – 关闭PreferenceFragment

    我又找了几个小时,没找到我理解/正在寻找的答案. 我有一个首选项屏幕,当用户点击菜单中的设置时会打开该屏幕.这有效. 但是,当他完成设置时,我如何才能最好地使用户关闭此屏幕. 我喜欢在Chrome中完 ...

  4. android emulator虚拟设备之qemu pipe分析(三)

    一.概述 qemu pipe也是一个虚拟设备,是一个通用的虚拟设备,用于提供guest os和emulator通信的功能,类似于一个抽象的通信层,这样就不用写很多虚拟设备了. 之前在guest os中 ...

  5. Android开源项目xUtils HttpUtils模块分析

    使用HttpUtils 只需要new 出一个实例便可. public class HttpFragment extends Fragment {     // 同步请求 必须在异步块儿中执行     ...

  6. android独特fragment,Android Fragment总结

    Android Fragment小结 为何使用Fragment? 实现UI的灵活组建与拆分,与Activity配合可保持Activity的视图不变,转而操作Fragment,就像Activity的模块 ...

  7. android fragmentactivity fragment,Android:Activity与Fragment通信(99%)完美解决方案

    前言 最近一直在想着能否有一种更好的方案来解决:Android中Activity与Fragment之间通信的问题,什么叫更好呢,就是能让Fragment的复用性高,性能还有好(不用反射),代码还要好维 ...

  8. android滑动fragment,android中ViewPager结合Fragment进行无限滑动

    实现ViewPager结合Fragment实现无限循环切换,这里也是在适配器里面进行的,当然使用滑动监听也能够实现 import android.support.v4.app.Fragment; im ...

  9. android编程fragment,Android中关于FragmentA嵌套FragmentB的问题

    问题描述: 在项目中Activity A中嵌套Fragment B,Fragment B中再嵌套Fragment C,如图: 问题1:在点击Activity A中主菜单1进行切换时,报错Fragmen ...

最新文章

  1. 用指针的观点来深入理解dup和dup2的用法
  2. 记一次Jquery获取值的典型错误
  3. 异常检测时间序列_时间序列的无监督异常检测
  4. 转 安卓解决 IDEA 下 struts.xml 中 extends=“struts-default“ 报红的问题
  5. 财务报表分析-损益表,资产负债表,现金流,回报率
  6. tif格式怎么转jpg格式
  7. Android沉浸式全面讲解(一)
  8. macbook air 卸载java,macbook air如何删除程序
  9. 麦肯锡逻辑树——快速分析和解决问题的有效方法
  10. 健身服务公司iFIT赴美上市,64亿美元估值中藏着“喜”与“忧”?
  11. php 正则匹配小括号
  12. caffe学习笔记2:net forward与backward
  13. 阿里P8架构师首推Netty实战,实战篇+面试篇,将知识点一网打尽
  14. protege 和webprotege使用
  15. 谷歌Project Ara,将开启下一个智能手机时代
  16. STM32驱动_rc522
  17. 3dmax2017下载+注册机
  18. JavaScript:moment12小时制和24小时制
  19. 2022年9月21日
  20. 关于嵌入式系统的启动(装载)

热门文章

  1. 安卓开发设置全屏隐藏标题栏
  2. angular2创建应用_如何在Angular 2+应用程序中使用JavaScript库
  3. Spring DI注入规则
  4. 第一部linux手机,手机界再掀风波,英特尔力争在下一部手机中抢得一席之地
  5. Python回调函数的实现
  6. web.config学习之assembly
  7. 漫步数理统计五——条件概率与独立(上)
  8. Google浏览器调试前端代码
  9. 使用git将本地文件上传到远程仓库
  10. 在csdn中输入公式的方法