1 / 19
文档名称:

传感器SensorService详细分析.docx

格式:docx   大小:1,522KB   页数:19页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

传感器SensorService详细分析.docx

上传人:63229029 2017/4/16 文件大小:1.49 MB

下载得到文件列表

传感器SensorService详细分析.docx

文档介绍

文档介绍:SensorService 相关架构和流程指导 1. 整体架构 Applications 层是使用传感器实现各种功能的具体应用程序,用来接收 Sensor 返回的数据,并处理实现对应的 UI 效果和特定功能,比如翻转静音、体感通话等功能。 Framework 层为应用层提供 register 、 unRegister 等接口, 同时通过 JNI 建立与 Nativ e 层的联系, 主要代码有 a和 。另外,自动转屏、自动调节亮度、距离传感器控制亮屏和灭屏等功能也是在 framework 层实现。如果想用现有传感器通过算法合成其他传感器功能,也可以在本层添加,但由于不是 Android 原有接口,外部第三方 APK 无法使用。主要代码路径为: framework/base/core/java/android/hardware/ framework/base/core/jni/ Libraries 表示动态库, 它封装了整个 Sensor 的 IPC 机制,如 SensorManage r 是客户端, SensorService 是服务端,而 HAL 部分是封装了服务端对 Kernel 的直接访问。主要代码路径为: framework /native/libs/gui (生成 ) framework/native/services/sensorservice (生成 ) hardware/qcom/sensors 或 hardware/hisense/sensors (生成 ) 驱动注册到 Kernel 的 Input Subsystem 上,然后通过 Event Device 把 Senso r 数据传到 HAL 层,准确说是 HAL 从 Event 读。硬件挂在 I2C 总线上。 2. 类图 Sensor 框架分为三个层次,客户度、服务端、 HAL 层,服务端负责从 HAL 读取数据,并将数据写到管道中,客户端通过管道读取服务端数据。客户端主要类 :从 开始, SensorManager 被定义为一个抽象类,定义了一些主要的方法,该类是应用层直接使用的类,提供给应用层的接口。 : 继承于 类,是客户端消息处理的实体,应用程序调用 getSystemService() 方法获取 Sensor Service 时,实际上获取的就是 SystemSensorManager 的实例。 SensorEventListener 接口:用于注册监听的接口,应用层必须实现该接口,并重写接口的两个方法,实现对获取到的 Sensor 数据的处理。 : 提供在 Java 层和 Native 层之间通信的 JNI 接口。 Receiver : 的内部类,保存了一个指向 SensorEventQueue 的指针,利用消息队列监听服务端事件上报,可以将消息队列中获取的数据回调到 Java 层。 : sensor 在 Native 层的客户端,负责与服务端 通信 : 消息队列,保存了指向 SensorEventConnectio n 对象的指针,实现与 SensorService 之间的命令传输和数据读取。服务端主要类 :服务端数据处理中心 SensorEventConnection : 的内部类, 从 BnSensorEventConnection 继承来, 实现接口 ISensorEventConnection 的一些方法, ISensorEventConnection 在 SensorEventQueue 会保存一个指针,指向调用服务接口创建的 SensorEventConnection 对象 :在这个类中创建了管道,用于服务端与客户端读写数据 SensorDevice :负责与 HAL 进行通信,传递命令和数据。 HAL 层