Android模拟器学framework和driver之传感器篇5(Android framework)
之前的几篇文章重点介绍了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设置以及监听。
敬请期待。。。
更多相关文章
- 随想录(一个android原生app的代码赏析)
- Loader和Fragment使用示例代码
- Eclipse中查看Android源代码
- Android 记忆卡片游戏 记忆力 Android游戏 Android记忆卡片游戏
- android 源代码在线查看和索引
- Android系统默认Home应用程序(Launcher)的启动过程源代码分析(3)
- Android通过chrome插件在线查看Android源代码