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

Android sensor.getType() check sometimes incorrect

我需要获取方向值,我遵循通用方法:

@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里面有旧数据??

UPD:如果我理解正确,变量 link 到内存中的相同位置......这里有什么问题?

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

尝试:

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

而不是 switch 语句

避免在传感器中使用开关盒。对我有用!