我需要获取方向值,并且遵循常见的方法:
@Override
public final void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
mGravity = event.values;
break;
case Sensor.TYPE_MAGNETIC_FIELD:
mGeomagnetic = event.values;
break;
}
if (mGravity == mGeomagnetic){
Log.w("Sensor", "Strange things happen!");
}
}
public float[] getOrientation(){
float orientation[] = new float[3];
if (mGravity != null && mGeomagnetic != null) {
float R[] = new float[9];
float I[] = new float[9];
if (SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic)) {
SensorManager.getOrientation(R, orientation);
return orientation;
} else {
Log.w("Sensor", "getRotationMatrix() failed");
}
}
return new float[]{0,0,0};
}
如您所见,我已经检查了两个分别存储的值是否相等。我之所以被迫这样做,是因为确实发生了奇怪的事情!
怎么可能,如何避免这种情况?event.sensor.getType()的检查有时不正确。逻辑不起作用,我缺少什么???
这是更多的信息。Switch语句运行良好,但是无论如何变量都是混合的。
可能是event.values包含旧数据吗?
尝试复制SensorEventvalues
字段,而不要保留引用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句