我试图根据设备方向设置地图方位。到目前为止它工作正常,但偶尔轴承设置为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);
}
}
}
答案 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包含在该列表中的原因。