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

升级Play Services到15.0.0后MapView.getMap()不支持该如何解决?

解决Play Services 15.0+中MapView.getMap()不再支持的问题

刚踩过一模一样的坑!当把Google Play Services从9.0.1升级到15.0.0版本后,MapView.getMap()确实被官方废弃并移除了——Google在15.0版本里把同步获取Map实例的方式换成了异步回调模式,避免阻塞主线程。

我当时查了资料后按下面的方式解决了问题,给你整理好完整的代码示例和说明:

核心解决思路

  1. 让你的Fragment(或Activity)实现OnMapReadyCallback接口
  2. 用MapView.getMapAsync(this)替代原来的MapView.getMap()
  3. 在onMapReady()回调中获取可用的GoogleMap实例

完整代码示例

public class MapsFragment extends Fragment implements OnMapReadyCallback {
    private MapView mMapView;
    private GoogleMap mGoogleMap;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // 先加载Fragment布局
        View view = inflater.inflate(R.layout.fragment_maps, container, false);
        
        mMapView = view.findViewById(R.id.mapView);
        // 初始化MapView
        mMapView.onCreate(savedInstanceState);
        // 异步请求Map实例,回调会触发onMapReady方法
        mMapView.getMapAsync(this);
        
        return view;
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mGoogleMap = googleMap;
        // 这里就可以正常操作GoogleMap了,比如设置地图类型、添加标记等
        mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        // 示例:添加一个位置标记
        mGoogleMap.addMarker(new MarkerOptions()
                .position(new LatLng(39.9042, 116.4074))
                .title("北京"));
    }

    // 务必同步MapView的生命周期,和Fragment生命周期保持一致
    @Override
    public void onResume() {
        super.onResume();
        mMapView.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
        mMapView.onPause();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mMapView.onDestroy();
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        mMapView.onLowMemory();
    }
}

关键注意点

  • getMapAsync()是异步执行的,不会阻塞主线程,这也是Google废弃同步方法的核心原因
  • 只有在onMapReady()回调触发后,GoogleMap实例才是完全可用的,别在回调外直接调用它的方法
  • 必须同步MapView的生命周期方法(onResume、onPause等),否则容易出现地图加载异常或内存泄漏问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:13:43