我需要获得方向值,并遵循常用方法:
@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 包含旧数据吗?
答案 0 :(得分:0)
尝试复制SensorEvent values
字段,而不是保留引用。
答案 1 :(得分:0)
尝试:
if(sensor.getType()==Sensors.TYPE_ACCELEROMETER)
{
.....
}<p>
if() //other sensor check
代替switch语句
避免在传感器中使用开关盒。为我工作!