概述
1 Android Sensor系统框架
Android Sensor系统框架如下:
图1 Android Sensor系统框架图
(1)SystemServer创建SensorService服务。
(2)之后将SensorService服务添加到ServiceManager里。
注意:ServiceManager管理的是SensorService服务不是SensorManager!
(3)Android app通过SensorManager获取SensorService服务,SensorManager是通过ServiceManager获取的SensorService服务。
(4)hal层SensorDevice封装了底层kernel sensor驱动接口,负责打开和关闭sensor设备等通用操作。
2 SensorManager分析
1 SensorManager作用
(1)连接SensorService
(2)对应用层提供接口,获取sensor类型和sensor数据
(3)处理sensor数据,转化成android可以识别的数据格式
2 App,SensorManager与SensorService交互流程
(1)App注册SensorManager
(2)获取SensorManager实例,注册事件监听器listener,覆写onSensorChanged()接口,监听sensor数据是否有变化
(3)创建消息队列,通过jni和SensorService建立连接(无连接套接字)
注意:SensorManager和SensorService建立连接的方式不是binder,是无连接套接字。
(4)接收hal层数据,通过jni回调java函数将sensor数据回调到framework(SensorManager)
(5)再通过之前App注册的回调函数,将sensor数据回调到App
3 SensorService分析
1 SensorService作用
(1)动态加载hal层的库
(2)抓取底层数据,根据需要向上转发sensor数据
2 SensorService初始化流程
(1)SystemServer初始化时,初始化SensorService
(2)SensorService创建SensorDevice对象,SensorDevice封装了hal层的操作函数集
(3)SensorDevice获取系统支持的sensor个数及sensor操作接口
(4)SensorService将系统支持的sensor添加到sensorList里
(5)等待SensorManager的连接,启动线程(threadLoop)分发数据
3 SensorService导入hal层so流程
(1)在/system/lib/hw下找要加载的库
(2)dlopen加载动态库
(3)dlsym得到sensor的操作函数集
4 SensorHal分析
1 sensors_module_t结构体
struct sensors_module_t HAL_MODULE_INFO_SYM = {
common : {
tag: HARDWARE_MODULE_TAG,
version_major: 1,
version_minor: 0,
id: SENSOR_HARDWARE_MODULE_ID,
name: "Invensense module",
author: "Invensense Inc.",
methods: &sensors_module_methods,
dso: NULL,
reserved: {0}
}
};
hal层主要是对fd的操作,打开,关闭,监听events,接收数据。需要Unix系统调用编程比较熟。
2 Android Sensor数据流
图2 Android Sensor数据流
SensorService通过poll()从SensorDevices获取数据,然后通过socket将sensor数据传递给SensorManager(native),SensorManager(native)将收到的sensor数据通过jni传递到SensorManager(java),SensorManager(java)最后将sensor数据传递给App层注册的回调。
注意:SensorManager与SensorService之间数据走的是socket套接字,命令走的是binder!
最后
以上就是合适魔镜为你收集整理的Android Sensor分析1 Android Sensor系统框架2 SensorManager分析3 SensorService分析4 SensorHal分析的全部内容,希望文章能够帮你解决Android Sensor分析1 Android Sensor系统框架2 SensorManager分析3 SensorService分析4 SensorHal分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复