Android传感器源码学习
系统中,传感器系统的Java部分的实现文件路径
系统中,传感器系统的Frameworks层的代码路径
系统中,传感器系统的JNI部分的代码路径
文件android_hardware_SensorManager.cpp的功能是实现文件SensorManager.java中的Native函数,通过调用SensorManager.cpp和SensorEventQueue.cpp中的相关类来完成相关工作。
nativeClassInit():在JNI层得到android.hardware.Sensor的JNI环境指针。
sensors_module_init():通过JNI调用本地框架,得到SensorService,SensorService初始化控制流各功能。
new Sensor():建立一个Sensor对象,具体可查阅官方网站API android.hardware.Sensor。
sensors_moudle_get_next_sensor():上层得到设备支持的所有Sensor,并放入SensorList链表。
new SensorThread():创建Sensor线程,当应用程序registerListener()注册监听器开启线程run(),没有数据变化时线程会阻塞。
SensorManager.cpp提供了对传感器数据部分的操作,实现了“sensor_data_XXXX()”格式的函数。在Native层的客户端,文件SensorManager.cpp还负责与服务端SensorService.cpp之间的通信工作。
系统中通过SensorSevice.cpp封装了HAL层的代码
·获取sensor列表(getSensorList)
·获取sensor时间(poll)
·Enable或Disable sensor(activate)
·设置delay时间
在Android的传感器系统中SensorEventQueue.cpp实现了处理消息队列的功能。此文件能够在创建其实例时传入SensorEventConnection的实例,SensorEventConnection继承自ISensorEventConnection。SensorEventConnection其实是客户端调用SensorService的createSensorEventConnection()方法创建的,是客户端与服务端沟通的桥梁。
·获取管道的句柄
·往管道读写数据
·通知服务端对Sensor可使用
系统中,HAL层提供了Android独立于具体硬件的抽象接口
具体实现文件需要开发者个人编写,具体可参考: