You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Maps在Android屏幕旋转时重置的解决方法咨询

解决Azure Maps屏幕旋转重置问题(Java)

方法一:通过OnReady回调恢复地图状态

Android屏幕旋转时默认会重建Activity,Azure Maps控件会随之重新初始化,导致地图视角重置。可以通过保存地图相机状态,再在地图加载完成后(OnReady回调)恢复状态来解决:

1. 保存地图状态

在Activity的onSaveInstanceState方法中,捕获当前地图的相机参数并保存到Bundle:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    AzureMapControl mapControl = findViewById(R.id.map_control);
    if (mapControl != null && mapControl.isMapLoaded()) {
        CameraPosition camera = mapControl.getMap().getCameraPosition();
        outState.putDouble("center_lat", camera.getCenter().getLatitude());
        outState.putDouble("center_lon", camera.getCenter().getLongitude());
        outState.putDouble("zoom", camera.getZoom());
        outState.putDouble("pitch", camera.getPitch());
        outState.putDouble("heading", camera.getHeading());
    }
}

2. 利用OnReady恢复状态

在Activity的onCreate方法中,设置地图的OnReady回调,待地图加载完成后读取保存的参数并恢复视角:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    AzureMapControl mapControl = findViewById(R.id.map_control);
    mapControl.setAzureMapsSubscriptionKey("你的Azure Maps密钥");

    mapControl.onReady(map -> {
        if (savedInstanceState != null) {
            double lat = savedInstanceState.getDouble("center_lat");
            double lon = savedInstanceState.getDouble("center_lon");
            double zoom = savedInstanceState.getDouble("zoom");
            double pitch = savedInstanceState.getDouble("pitch");
            double heading = savedInstanceState.getDouble("heading");

            CameraPosition restoredPos = new CameraPosition(
                    new LatLng(lat, lon),
                    zoom,
                    pitch,
                    heading
            );
            map.moveCamera(CameraUpdateFactory.newCameraPosition(restoredPos));
        }
    });
}

方法二:阻止Activity重建(可选)

如果不想处理状态保存,可在AndroidManifest.xml中给目标Activity添加配置,让系统屏幕旋转时不重建Activity:

<activity
    android:name=".MainActivity"
    android:configChanges="orientation|screenSize">
    <!-- 其他配置项 -->
</activity>

注意:这种方式会跳过Activity的重建生命周期,若有依赖屏幕方向的逻辑,需在onConfigurationChanged方法中手动处理。


内容的提问来源于stack exchange,提问作者Francisco Torres

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:51:39