2016-01-21 37 views
0

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

编辑 这里是我用来旋转地图的代码。

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); 
     } 
    } 
} 
+0

我认为这将有助于在问题中添加一些代码 – Rishabh

回答

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包含在该列表中的原因。