Sensor框架Framework层解读 - 图文(6)

2019-08-30 22:56

mSensorList[i] = mSensors.array() + i; } }

return NO_ERROR; }

View Code

前面我们讲到过,SensorService的创建的时候调用了defaultServiceManager:getService()将服务添加到了系统服务管理中。

现在我们又调用defaultServiceManager::geService()获取到SensorService服务的实例。 在通过IBind通信,就可以获取到Sensor列表,所以在客户端初始化的时候,做了两件事情: 1. 获取SensorService实例引用 2. 获取Sensor传感器列表

注册SensorLisenter

时序图

new ListenerDelegate(SensorEventListener listener, Sensor sensor, Handler handler) 在这个构造函数中会创建一个Handler,它会在获取到Sensor数据的时候被调用。

mHandler = new Handler(looper) { @Override

public void handleMessage(Message msg) {

final SensorEvent t = (SensorEvent)msg.obj; final int handle = t.sensor.getHandle();

switch (t.sensor.getType()) {

// Only report accuracy for sensors that support it.

case Sensor.TYPE_MAGNETIC_FIELD: case Sensor.TYPE_ORIENTATION:

// call onAccuracyChanged() only if the value changes

final int accuracy = mSensorAccuracies.get(handle);

if ((t.accuracy >= 0) && (accuracy != t.accuracy)) {

mSensorAccuracies.put(handle, t.accuracy);

mSensorEventListener.onAccuracyChanged(t.sensor, t.accuracy);

}

break; default:

// For other sensors, just report the accuracy once

if (mFirstEvent.get(handle) == false) { mFirstEvent.put(handle, true);

mSensorEventListener.onAccuracyChanged(

t.sensor, SENSOR_STATUS_ACCURACY_HIGH);

}

break; }

mSensorEventListener.onSensorChanged(t); sPool.returnToPool(t);

} };

View Code

创建消息队列

时序图

当客户端第一次注册监听器的时候,就需要创建一个消息队列,也就是说,android在目前的实现中,只创建了一个消息队列,一个消息队列中有一个管道,用于服务端与客户断传送Sensor数据。

在SensorManager.cpp中的createEventQueue方法创建消息队列:


Sensor框架Framework层解读 - 图文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:注册分类1、2、3、5.1类申报资料要求(试行)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: