设备方向更改会重置轴承计算输出

时间:2016-01-21 19:07:48

标签: android

我试图根据设备方向设置地图方位。到目前为止它工作正常,但偶尔轴承设置为0.我通过记录我的轴承计算输出和轴承我通过OnCameraChangeListener检查,看来我的计算是正确的但不知何故它在moveCamera内重置为0 () 方法。有趣的是它似乎是定期发生(大约5-6秒)。还有其他人遇到过这个问题吗?是否有一个原因?有解决方法吗?提前谢谢。

EDIT 这是我用来旋转地图的代码。

private void init() {
    mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
    mSensorManager.registerListener(this, mMagnetometer, SensorManager.SENSOR_DELAY_NORMAL);
}

@Override
public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
        mGravity = event.values;
    } else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
        mGeomagnetic = event.values;
    }

    if(mGravity != null && mGeomagnetic != null) {
        float R[] = new float[9];
        float I[] = new float[9];
        float newBearing;
        boolean success = SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic);
        if (success) {
            float orientation[] = new float[3];
            SensorManager.getOrientation(R, orientation);
            if (mBearing != Float.MIN_VALUE) {
                newBearing = mBearing
                        + ALPHA
                        * ((float) Math.toDegrees(orientation[0]) - mBearing);
            } else {
                newBearing = ((float) Math.toDegrees(orientation[0]));
            }
            mBearing = newBearing;
            CameraPosition cameraPosition = CameraPosition
                    .builder(mMap.getCameraPosition())
                    .bearing(mBearing).build();
            CameraUpdate cameraUpdate = CameraUpdateFactory
                    .newCameraPosition(cameraPosition);
            mMap.moveCamera(cameraUpdate);
        }
     }
 }

1 个答案:

答案 0 :(得分:1)

当手机旋转时,Android会破坏活动并重建它,失去任何尚未保存和恢复的短暂状态。如果你希望让android保持这种状态,你可以告诉它不要在配置更改时重建你的活动。

   <?xml version="1.0" encoding="utf-8"?>
   <manifest xmlns:android="http://schemas.android.com/apk/res/android"
       ...
       <application
          ...
          <activity
              android:name="<YourActivityName>"
              android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
              ...
           />
       />
    />

有许多事件会导致配置更改和活动重建。这就是键盘和screenSize包含在该列表中的原因。