Карта не отображается в osmdroid
Я пытался сделать проект osmdroid, используя Android Studio, но отображается любая карта. У меня есть только бланк сетки.
В моем XML-файле я поместил следующий код:
<?xml
version="1.0" encoding="utf-8"
?>
<LinearLayout
xmlns:android="..."
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<org.osmdroid.views.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
tilesource="Mapnik"
/>
</LinearLayout>
в моем файле.java я сделал этот метод onCreate
private MapView mMap;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
mMap = (MapView) findViewById(R.id.map);
mMap.setMultiTouchControls(true);
mMap.setBuiltInZoomControls(true);
}
IMapController mapController = mMap.getController();
mapController.setZoom(14);
mapController.setCenter(new GeoPoint(48.745, -3.455));
ScaleBarOverlay scala = new ScaleBarOverlay(mMap);
mMap.getOverlays().add(scala);
mMap.invalidate();
И я добавил следующие разрешения в манифесте:
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"
/>
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"
/>
<uses-permission
android:name="android.permission.ACCESS_WIFI_STATE"
/>
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"
/>
<uses-permission
android:name="android.permission.INTERNET"
/>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
/>
Вы знаете, как я могу решить эту проблему?
Я использовал osmdroid-android:5.6.4' (и я пробовал и другие версии, но у меня такая же проблема со всеми)
Заранее большое спасибо за ваш ответ!
0 ответов
Используйте версию 6.1 и выше для osmdroid lib. Следуй этим шагам:
1. удалите атрибуты tileource из вашего xml файла
tilesource="mapnik"
2. поместите этот фрагмент кода перед вызовом findviewbyId() вашей карты.
final Context ctx = getApplicationContext();
Configuration.getInstance().load(ctx, PreferenceManager.getDefaultSharedPreferences(ctx));
Configuration.getInstance().setUserAgentValue(BuildConfig.APPLICATION_ID);
mMap = (MapView) findViewById(R.id.map);
3. добавить ниже snnipet после findViewbyId()
mMap.setTileSource(TileSourceFactory.MAPNIK);
Ваш окончательный код должен быть таким:
activity.java
private MapView mMap;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
final Context ctx = getApplicationContext();
Configuration.getInstance().load(ctx, PreferenceManager.getDefaultSharedPreferences(ctx));
Configuration.getInstance().setUserAgentValue(BuildConfig.APPLICATION_ID);
mMap = (MapView) findViewById(R.id.map);
mMap.setTileSource(TileSourceFactory.MAPNIK);
mMap.setMultiTouchControls(true);
mMap.setBuiltInZoomControls(true);
}
XML-файл
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<org.osmdroid.views.MapView android:id="@+id/map"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>