将 getMap 替换为 getMapAsync

Replace getMap with getMapAsync

我想用 getMapAsync 替换已弃用的 getMap 方法,但我没有使用 MapFragment 而是 GoogleMap 像这样:

private GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);

    try {
        if(googleMap == null) {
            googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
        }
        googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        googleMap.setMyLocationEnabled(true);
        googleMap.setTrafficEnabled(true);
        googleMap.setIndoorEnabled(true);
        googleMap.setBuildingsEnabled(true);
        googleMap.getUiSettings().setZoomControlsEnabled(true);

如果我像这样用 MapFragment 替换 googleMap,我就不能再用 setMapType 等等。那么在我的情况下如何更改为 getMapAsync

MapFragment mapFragment = (MapFragment) getFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

和官方文档一样,get map async 需要回调; 你的 "main entry point" google 地图东西就在那里!

public class MapPane extends Activity implements OnMapReadyCallback {

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

        MapFragment mapFragment = (MapFragment) getFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap map) {
        // DO WHATEVER YOU WANT WITH GOOGLEMAP
        map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        map.setMyLocationEnabled(true);
        map.setTrafficEnabled(true);
        map.setIndoorEnabled(true);
        map.setBuildingsEnabled(true);
        map.getUiSettings().setZoomControlsEnabled(true);
    }
}

非常简单,只需让您的 Activity 实现 OnMapReadyCallback 接口,然后在 onMapReady() 回调中分配您的 googleMap 引用。

然后,根据需要对 googleMap 执行任何操作。

这是一个简单的例子:

public class MainActivity extends Activity implements OnMapReadyCallback {

    private GoogleMap googleMap;

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

        MapFragment mapFragment = (MapFragment) getFragmentManager()
                .findFragmentById(R.id.map);

        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap map) {

        googleMap = map;

        setUpMap();

    }

    public void setUpMap(){

        googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        googleMap.setMyLocationEnabled(true);
        googleMap.setTrafficEnabled(true);
        googleMap.setIndoorEnabled(true);
        googleMap.setBuildingsEnabled(true);
        googleMap.getUiSettings().setZoomControlsEnabled(true);
    }


}

如果您使用 MapFragment,您仍然可以使用 stMapType 方法。在您的 activity 上实施 OnMapReadyCallback。 创建 MapFragment 并对该对象调用 getAsyncMap 方法。 它会要求您执行 onMapReady(GoogleMap map) 方法,您可以在那里设置地图类型等。 希望对你有帮助。

我发现理解 getMapAsync 使用的更好方法是在 Android Studio 中创建一个新项目并使用 google 地图模板 activity 而不是空 activity.

您将有一个项目可以用来研究和调整您自己的项目。