Sensor app开发一般会包含五步:
1. 获取sensor manager对象;
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
2. 获取sensor object;
mLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
3. 定义eventListener:
mLightSensorListener = new SensorEventListener()
4. 注册eventListener;
mSensorManager.registerListener(mLightSensorListener, mLightSensor,
LIGHT_SENSOR_RATE_MILLIS * 1000, mHandler);
5. 卸载eventListener;
mSensorManager.unregisterListener(mLightSensorListener);
nativeGetNextSensor()通过SensorManager::getInstance()获取sensorManager对象,通过getSensorList(&sensorList);获取sensorlist。
getSensorList()通过sensorManager的构造方法assertStateLocked()来获取sensorService对象,assertStateLocked()同时会调用sensorService::getSensorList()来获取最终的sensorList,也就是前面sensorService启动时所获得了sensorList.
1. 获取sensor manager对象;
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
2. 获取sensor object;
mLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
3. 定义eventListener:
mLightSensorListener = new SensorEventListener()
4. 注册eventListener;
mSensorManager.registerListener(mLightSensorListener, mLightSensor,
LIGHT_SENSOR_RATE_MILLIS * 1000, mHandler);
5. 卸载eventListener;
mSensorManager.unregisterListener(mLightSensorListener);
1. 获取sensor manager对象,getSystemService()实际上是调用registerService()来获得一个sensorManager.
registerService(SENSOR_SERVICE, new ServiceFetcher() {
public Object createService(ContextImpl ctx) {
return new SystemSensorManager(ctx.getOuterContext(),
ctx.mMainThread.getHandler().getLooper());
}});
public SystemSensorManager(Context context, Looper mainLooper){
……
nativeClassInit();
……
i = nativeGetNextSensor(sensor, i);
……
}
nativeGetNextSensor()通过SensorManager::getInstance()获取sensorManager对象,通过getSensorList(&sensorList);获取sensorlist。
nativeGetNextSensor(JNIEnv *env, jclass clazz, jobject sensor, jint next){
SensorManager& mgr(SensorManager::getInstance());
Sensor const* const* sensorList;
size_t count = mgr.getSensorList(&sensorList);
……
}
getSensorList()通过sensorManager的构造方法assertStateLocked()来获取sensorService对象,assertStateLocked()同时会调用sensorService::getSensorList()来获取最终的sensorList,也就是前面sensorService启动时所获得了sensorList.
ssize_t SensorManager::getSensorList(Sensor const* const** list) const
{
Mutex::Autolock _l(mLock);
status_t err = assertStateLocked();
if (err < 0) {
return ssize_t(err);
}
*list = mSensorList;
return mSensors.size();
}
status_t SensorManager::assertStateLocked() const {
if (mSensorServer == NULL) {
// try for one second
const String16 name("sensorservice");
for (int i=0 ; i<4 ; i++) {
status_t err = getService(name, &mSensorServer);
if (err == NAME_NOT_FOUND) {
usleep(250000);
continue;
}
if (err != NO_ERROR) {