Я разрабатывал простое приложение для Android, в котором использовался API-интерфейс Google Map, и частью его функциональности является возможность динамического изменения поставщика карты (плитки) (например, изменение плитки между картой Google Map и плиткой Open Street Map).Я пытаюсь использовать Google Map TileProvider, но вместо плитки OSM я ничего не вижу (например, плитка не загружается).Если выбран провайдер Google, все работает нормально.
Следующий фрагмент кода иллюстрирует, как он реализован:
mapView = (MapView) rootView.findViewById(R.id.map);
mapView.onCreate(savedInstanceState);
try {
MapsInitializer.initialize(getActivity().getApplicationContext());
} catch (Exception e) {
logger.error("Error occurs while map initializing");
}
mapView.onResume();
mapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
if (MapProvider.valueOf(LocalPreferenceManager.getMapProvider(getContext())) != MapProvider.Google) {
final String osmUrl = "http://a.tile.openstreetmap.org/%d/%d/%d.png";
TileProvider tileProvider = new UrlTileProvider(256,256) {
@Override
public URL getTileUrl(int x, int y, int zoom) {
URL url = null;
try {
String s = String.format(osmUrl,zoom, x, y);
url = new URL(s);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return url;
}
};
mMap.setMapType(GoogleMap.MAP_TYPE_NONE);
mMap.addTileOverlay(new TileOverlayOptions().
tileProvider(tileProvider));
}
//some action...
}
});
Буду признателен за любую помощь.