如何在onSensorChanged()方法中只保存起始值?

时间:2013-07-12 22:00:44

标签: android rotation sensor

我正在使用getRotationMatrix()来计算v [0],v [1],v [2]以及onSensorChanged()方法中相应的方位角,俯仰和滚转值。我想知道当boolean detectAzimuth变为true时,如何只将第一个v [0](或相应的方位角)值保存到firstAzimuth中?

private boolean detectAzimuth = false;
private float firstAzimuth;

@Override
public void onSensorChanged(SensorEvent event) {

if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
    accValues = event.values.clone();
}

if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
    geoValues = event.values.clone();
}

boolean success = SensorManager.getRotationMatrix(r, i, accValues,
    geoValues);

if (success) {
    SensorManager.getOrientation(r, v);

    if (detectAzimuth) {
    azimuth = v[0] * (180 / Math.PI);
    }
    pitch = v[1] * (180 / Math.PI);
    roll = v[2] * (180 / Math.PI);
}
}

1 个答案:

答案 0 :(得分:0)

您可以首次检查是否获得了方位角的值。如果没有,请获取值并使detectAzimuth为true。然后将值保存在SharedPreference中。

现在,下次使用布尔变量detectAzimuth检查您是否已经第一次使用了方位角的值。如果它的真实意味着你已经接受了它。从Sharedpreference获取它并将其分配给firstAzimuth。那就是你总是会得到azimuth的第一个值。

if (success) {
    SensorManager.getOrientation(r, v);
    if (!detectAzimuth) {  // if not taken yet
        azimuth = v[0] * (180 / Math.PI); // take the value
        detectAzimuth = true; //make the bolean true to know that you've taken the value
        //Store in SharedPreference
        SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
        editor.putFloat("firstAzimuth", azimuth);
        editor.commit();
    }else{ //if already taken value first time
        //get the first value from SharedPreference and assign it to firstAzimuth
        SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
        firstAzimuth = prefs.getFloat("firstAzimuth", 0.0);
        //take the new value
        azimuth = v[0] * (180 / Math.PI); // take the new value but don't store it
    }
    pitch = v[1] * (180 / Math.PI);
    roll = v[2] * (180 / Math.PI);
    }
}

希望这会有所帮助。仅为了您的信息,这将阻止您获取更多azimuth值,因为您已经收到一个值并且每次都检查它是否存在。我不确定你是否想要那个。如果没有,那么我们可以进一步讨论可能性。