之前的几篇文章重点介绍了android中传感器模块的标准移植方法,这篇文章我主要跟大家介绍下android framework中对传感器的处理以及管理,涉及到的代码有:

/frameworks/base/services/sensorservice/SensorService.cpp

/frameworks/base/services/sensorservice/SensorDevice.cpp

/frameworks/base/services/sensorservice/SensorInterface.cpp

/frameworks/base/core/jni/android/hardware/jni/android_hardware_SensorManager.cpp

/frameworks/base/core/java/android/hardware/SensorManager.java

首先在这里我先声明下,网上关于这部分的资料很多,不过都大同小异,而且大部分是android2.2的分析,但是到了2.3之后sensor这边改了很多代码,一开始我也看的很迷糊的。这里我只是阐述了我的理解,可能是有问题的,希望有识之士可以指出,这边我也只能粗略的介绍了,能力有限。

在上一篇文章中介绍了在SensorDevice.cpp中使用hw_get_module来获得HAL层编译出来的sensor.goldfish.so:


这就是framework调用到HAL的最最重要的一个接口,接下来的工作可以说就是根据得到的这个地址来找到相应的HAL中定义的hw_device_t结构体中的回调函数作为framework中的api,然后进行“封装”,因为hal中只是poll数据,framework需要对数据处理,以及封装API给android app开发者使用。


最主要的还是open,close,activate,setDelay,poll等回调函数。

得到module之后再open,然后就是得到activate,poll等函数进行封装到SensorDevice这个类当中去。最后,service这层是通过SensorInterface.cpp把接口都封装到HardwareSensor这个类中,传送到/frameworks/base/core/jni/android_hardware_SensorManager.cpp中被使用。

大家可以看到其实/frameworks/base/core/jni/android_hardware_SensorManager.cpp就是/frameworks/base/core/java/android/hardware/SensorManager.java的原生代码,其中封装了一些native function给java文件调用,其中对于我们来说最重要的也就是poll函数。

下面是core中的jni函数:


java层就是调用了这边的这个函数来得到底层的数据,其中比较重要的其实就是


设置了value,status,timestamp这三个变量,java和应用层也就是用到了这3个参数来写android app的。


接下去我就不分析了,下面就是一些封装,封装,再封装,然后设置sensor的监听器,一般我们修改和跟踪代码就是通过以上介绍的函数中加。

ok,这边android sensor 的framework就粗略的介绍到这边。

下面介绍另外一种方法从driver打通到android framework层,其中会涉及到android server jni和driver中的uevent设置以及监听。

敬请期待。。。

更多相关文章

  1. 随想录(一个android原生app的代码赏析)
  2. Loader和Fragment使用示例代码
  3. Eclipse中查看Android源代码
  4. Android 记忆卡片游戏 记忆力 Android游戏 Android记忆卡片游戏
  5. android 源代码在线查看和索引
  6. Android系统默认Home应用程序(Launcher)的启动过程源代码分析(3)
  7. Android通过chrome插件在线查看Android源代码

随机推荐

  1. 画出Android的大体架构图
  2. Android 官方示例:android-architecture
  3. Android ADT_20新建项目Android Support
  4. Android系统架构及特点
  5. Android Material Design向下兼容至低版
  6. 在EeePC上运行Android!(转)(也是代码下载配
  7. Android利用drawable文件夹自定义控件背
  8. Android(安卓)Audio底层原理(一)
  9. android环境配置(Error generating final
  10. android上dialog横屏下实现全屏效果