java层怎样获得SensorList
registerListenerImpl
创建SensorEventQueue
jni调用libsensor.so
jni层Receiver
Receiver是很关键的一个class, 链接native 和java, 直接调用native/java函数
libsensor.so
创建native SensorEventQueue
通过SensroManager得到ISensorEventConnection
SensorEventQueue的读写
SensorEventQueue并没有通过new BitTube创建socket, 而是通过dup获得了sensorservice的socketFd, Receiver监听的就是sensorservice的Fd 读到的也是sensorservice收到的数据
派生类SensorEventQueue
enableSensor
对sensor的配置、控制通过是ISensorEventQueue, 不是ISensorService. ISensorService的功能是获得SensorList.
java 层传入的参数如常说的采样率对应的是samplingPeriodUs,到SensorEventQueue里变成了delayUs意义就不明显了, 这里还有个单位的变化,java层是Us, Native层的SensorEventQueue的enableSensor转换成ns
public boolean registerListener(SensorEventListener listener, Sensor sensor,
int samplingPeriodUs, int maxReportLatencyUs)
status_t SensorEventQueue::enableSensor(int32_t handle, int32_t samplingPeriodUs,
int64_t maxBatchReportLatencyUs, int reservedFlags) const {
return mSensorEventConnection->enableDisable(handle, true, us2ns(samplingPeriodUs),
us2ns(maxBatchReportLatencyUs), reservedFlags);
}