sensor数据都是SensorEventListener.onSensorChanged回调过来的value下的值
那么value下的值是从何而来
先看注册
manager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME);
listener为SensorEventListener类型
D/SensorManager( 2161): registerListenerImpl add first sensor {Sensor name="Devices 3-axis Accelerometer", vendor="Spreadtrum
rometer", version=1, type=1, maxRange=19.6133, resolution=0.009576807, power=0.7, minDelay=10000} to listener:com.sprd.validat
ls.itemstest.GsensorTestActivity$2@1a2952dc result true
调用SensorManager( 2161): registerListenerImpl
registerListenerImpl的实现在SystemSensorManager
@Override
protected boolean registerListenerImpl(SensorEventListener listener, Sensor sensor,
int delayUs, Handler handler, int maxBatchReportLatencyUs, int reservedFlags) {
if (listener == null || sensor == null) {
Log.e(TAG, "sensor or listener is null");
return false;
}
// Trigger Sensors should use the requestTriggerSensor call.
if (sensor.getReportingMode() == Sensor.REPORTING_MODE_ONE_SHOT) {
Log.e(TAG, "Trigger Sensors should use the requestTriggerSensor.");
return false;
}
if (maxBatchReportLatencyUs < 0 || delayUs < 0) {
Log.e(TAG, "maxBatchReportLatencyUs and delayUs should be non-negative");
return false;
}
// Invariants to preserve:
// - one Looper per SensorEventListener
// - one Looper per SensorEventQueue
// We map SensorEventListener to a SensorEventQueue, which holds the looper
synchronized (mSensorListeners) {
SensorEventQueue queue = mSensorListeners.get(listener);
boolean result;
if (queue == null) {
Looper looper = (handler != null) ? handler.getLooper() : mMainLooper;
queue = new SensorEventQueue(listener, looper, this);
result = queue.addSensor(sensor, delayUs, maxBatchReportLatencyUs, reservedFlags);
Log.d(TAG, "registerListenerImpl add first sensor " + sensor + " to listener:" + listener + " result " + result);
if (!result) {
queue.dispose();
return false;
}
Log.d(TAG, "registerListenerImpl bind queue and listener " + listener);
mSensorListeners.put(listener, queue);
return true;
} else {
result = queue.addSensor(sensor, delayUs, maxBatchReportLatencyUs, reservedFlags);
Log.d(TAG, "registerListenerImpl add more sensor:" + sensor + " to listener:" + listener + " result:" + result);
return result;
}
}
}
queue = new SensorEventQueue(listener, looper, this);
这句话看着应该是时looper循环给listener值的
看看写了啥
static final class SensorEventQueue extends BaseEventQueue {
private final SensorEventListener mListener;
private final SparseArray<SensorEvent> mSensorsEvents = new SparseArray<SensorEvent>();
public SensorEventQueue(SensorEventListener listener, Looper looper,
SystemSensorManager manager) {
super(looper, manager);
mListener = listener;
}
@Override
public void addSensorEvent(Sensor sensor) {
SensorEvent t = new SensorEvent(Sensor.getMaxLengthValuesArray(sensor,
mManager.mTargetSdkLevel));
synchronized (mSensorsEvents) {
mSensorsEvents.put(sensor.getHandle(), t);
}
}
@Override
public void removeSensorEvent(Sensor sensor) {
synch
那么value下的值是从何而来
先看注册
manager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME);
listener为SensorEventListener类型
D/SensorManager( 2161): registerListenerImpl add first sensor {Sensor name="Devices 3-axis Accelerometer", vendor="Spreadtrum
rometer", version=1, type=1, maxRange=19.6133, resolution=0.009576807, power=0.7, minDelay=10000} to listener:com.sprd.validat
ls.itemstest.GsensorTestActivity$2@1a2952dc result true
调用SensorManager( 2161): registerListenerImpl
registerListenerImpl的实现在SystemSensorManager
@Override
protected boolean registerListenerImpl(SensorEventListener listener, Sensor sensor,
int delayUs, Handler handler, int maxBatchReportLatencyUs, int reservedFlags) {
if (listener == null || sensor == null) {
Log.e(TAG, "sensor or listener is null");
return false;
}
// Trigger Sensors should use the requestTriggerSensor call.
if (sensor.getReportingMode() == Sensor.REPORTING_MODE_ONE_SHOT) {
Log.e(TAG, "Trigger Sensors should use the requestTriggerSensor.");
return false;
}
if (maxBatchReportLatencyUs < 0 || delayUs < 0) {
Log.e(TAG, "maxBatchReportLatencyUs and delayUs should be non-negative");
return false;
}
// Invariants to preserve:
// - one Looper per SensorEventListener
// - one Looper per SensorEventQueue
// We map SensorEventListener to a SensorEventQueue, which holds the looper
synchronized (mSensorListeners) {
SensorEventQueue queue = mSensorListeners.get(listener);
boolean result;
if (queue == null) {
Looper looper = (handler != null) ? handler.getLooper() : mMainLooper;
queue = new SensorEventQueue(listener, looper, this);
result = queue.addSensor(sensor, delayUs, maxBatchReportLatencyUs, reservedFlags);
Log.d(TAG, "registerListenerImpl add first sensor " + sensor + " to listener:" + listener + " result " + result);
if (!result) {
queue.dispose();
return false;
}
Log.d(TAG, "registerListenerImpl bind queue and listener " + listener);
mSensorListeners.put(listener, queue);
return true;
} else {
result = queue.addSensor(sensor, delayUs, maxBatchReportLatencyUs, reservedFlags);
Log.d(TAG, "registerListenerImpl add more sensor:" + sensor + " to listener:" + listener + " result:" + result);
return result;
}
}
}
queue = new SensorEventQueue(listener, looper, this);
这句话看着应该是时looper循环给listener值的
看看写了啥
static final class SensorEventQueue extends BaseEventQueue {
private final SensorEventListener mListener;
private final SparseArray<SensorEvent> mSensorsEvents = new SparseArray<SensorEvent>();
public SensorEventQueue(SensorEventListener listener, Looper looper,
SystemSensorManager manager) {
super(looper, manager);
mListener = listener;
}
@Override
public void addSensorEvent(Sensor sensor) {
SensorEvent t = new SensorEvent(Sensor.getMaxLengthValuesArray(sensor,
mManager.mTargetSdkLevel));
synchronized (mSensorsEvents) {
mSensorsEvents.put(sensor.getHandle(), t);
}
}
@Override
public void removeSensorEvent(Sensor sensor) {
synch