Android sensor.getType()检查有时不正确

时间:2015-08-13 08:19:09

标签: java android android-sensors android-orientation

我需要获得方向值,并遵循常用方法:

@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语句运行良好,但无论如何变量都是混合的。

enter image description here

可能是 event.values 包含旧数据吗?

UPD:如果我理解正确,变量会链接到内存中的相同位置......这里有什么问题? enter image description here

2 个答案:

答案 0 :(得分:0)

尝试复制SensorEvent values字段,而不是保留引用。

答案 1 :(得分:0)

尝试:

if(sensor.getType()==Sensors.TYPE_ACCELEROMETER)
{
..... 
}<p>
if()  //other sensor check

代替switch语句

避免在传感器中使用开关盒。为我工作!