内容发布更新时间 : 2024/11/16 13:28:14星期一 下面是文章的全部内容请认真阅读。
【Android】Sensor框架Framework
层解读
Sensor整体架构
整体架构说明
1. 黄色部分表示硬件,它要挂在I2C总线上
2. 红色部分表示驱动,驱动注册到Kernel的Input Subsystem上,然后通过Event Device把
Sensor数据传到HAL层,准确说是HAL从Event读
3. 绿色部分表示动态库,它封装了整个Sensor的IPC机制,如SensorManager是客户端,
SensorService是服务端,而HAL部分是封装了服务端对Kernel的直接访问 4. 蓝色部分就是我们的Framework和Application了,JNI负责访问Sensor的客户端,而
Application就是具体的应用程序,用来接收Sensor返回的数据,并处理实现对应的UI效果,如屏幕旋转,打电话时灭屏,自动调接背光(这三个功能的具体实现会在以后分析)
Sensor总体调用关系图 本节主要解读Android的Framework层框架。 Sensor 框架分为三个层次,客户度、服务端、HAL层,服务端负责从HAL读取数据,并将数据写到管道中,客户端通过管道读取服务端数据。 客户端主要类 SensorManager.java 从android4.1开始,把SensorManager定义为一个抽象类,定义了一些主要的方法,该类主要是应用层直接使用的类,提供给应用层的接口
SystemSensorManager.java
继承于SensorManager,客户端消息处理的实体,应用程序通过获取其实例,并注册监听接口,获取sensor数据。
sensorEventListener接口 用于注册监听的接口 sensorThread
是SystemSensorManager的一个内部类,开启一个新线程负责读取读取sensor数据,当注册了sensorEventListener接口的时候才会启动线程
android_hardware_SensorManager.cpp
负责与java层通信的JNI接口 SensorManager.cpp
sensor在Native层的客户端,负责与服务端SensorService.cpp的通信
SenorEventQueue.cpp
消息队列
服务端主要类
SensorService.cpp 服务端数据处理中心 SensorEventConnection
从BnSensorEventConnection继承来,实现接口ISensorEventConnection的一些方法,ISensorEventConnection在SensorEventQueue会保存一个指针,指向调用服务接口创建的SensorEventConnection对象
Bittube.cpp
在这个类中创建了管道,用于服务端与客户端读写数据