2016-01-21 59 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包含在該列表中的原因。