Sensor框架Framework层解读.docx

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Sensor框架Framework层解读

【Android】Sensor框架Framework层解读Sensor整体架构 整体架构说明黄色部分表示硬件,它要挂在I2C总线上红色部分表示驱动,驱动注册到Kernel的Input Subsystem上,然后通过Event Device把Sensor数据传到HAL层,准确说是HAL从Event读绿色部分表示动态库,它封装了整个Sensor的IPC机制,如SensorManager是客户端,SensorService是服务端,而HAL部分是封装了服务端对Kernel的直接访问蓝色部分就是我们的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 在这个类中创建了管道,用于服务端与客户端读写数据 SensorDevice 负责与HAL读取数据HAL层 Sensor.h是google为Sensor定义的Hal接口,单独提出去?客户端读取数据调用时序图 apk注册监听器SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); Sensor mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); protected void onResume() { super.onResume(); mSensorManager. registerListenerImpl (this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); } protected void onPause() { super.onPause(); mSensorManager.unregisterListener(this); } public interface SensorEventListener { public void onSensorChanged(SensorEvent event); public void onAccuracyChanged(Sensor sensor, int accuracy);}View Code Activity实现了SensorEventListener接口。 在onCreate方法中,获取SystemSensorManager,并获取到加速传感器的Sensor; 在onResume方法中调用SystemSensorManager,registerListenerImpl注册监听器; 当Sensor数据有改变的时候将会回调onSensorCha

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档