上一章总结了SensorService的工作流程,现在细分一下OnFirstRef()函数究竟做了什么
流程很清晰,SensorService第一次创建之后,运行onFirstRef函数
其中调用getSensorList获得Sensor的列表,之后循环对每个Sensor进行注册,并把SensorList交给UserSensorList,之后UserSensorList将提交给JAVA框架层。
最后运行run,即SensorService的函数threadLoop
其中对SensorDevice使用poll函数来获取数据,之后处理虚拟传感器(由多个硬件传感器数据结合模拟一个传感器工作),比如直线加速度传感器等,最后sendEvents,将数据发送到管道中供APP应用层使用。
应用层数据使用
获取sensor manager对象;
SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);获取sensor object;
Sensor mGYRSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);sensor可能会有很多,可以用sensorlist全部获取
定义eventListener:
SensorEventListener mGYRSensorListener = new SensorEventListener()注册eventListener;
mSensorManager.registerListener(mGYRSensorListener, mGYRSensor,
SensorManager.SENSOR_DELAY_GAME, mHandler);卸载eventListener;
mSensorManager.unregisterListener(mGYRSensorListener);
以上应用的方式非常灵活,不一定严格遵循此格式,可以通过Service等形式来灵活使用