我在android 6.0中使用osmdroid 5.4.1 lib。我实时询问WRITE_EXTERNAL_STORAGE和ACCESS_COARSE / FINE_LOCATION权限。 但地图不起作用:
无法解码流:java.io.FileNotFoundException:... open failed:EACCES(Permission denied)
我的主Activity的onRequestPermissionsResult()在用户授予存储写入权限后调用以下内容:
public void initTileSources() {
mMapnikTileSource = new XYTileSource(MAPDIR_MAPNIK, 1, MAXZOOMLEVEL, 256, ".png", new String[]{"http://tile.openstreetmap.de/",
"http://tile.openstreetmap.org/"});
mMapView.setTileSource(mMapnikTileSource);
mSeamarksTileSource = new XYTileSource(MAPDIR_SEAMARK, 1, MAXZOOMLEVEL, 256, ".png", new String[]{
"http://t1.openseamap.org/seamark/", "http://tiles.openseamap.org/seamark/"});
TilesOverlay SeamarksOverlay = new TilesOverlay(new MapTileProviderBasic(getActivity(), mSeamarksTileSource), getActivity());
SeamarksOverlay.setLoadingBackgroundColor(Color.TRANSPARENT);
mMapView.getOverlays().add(SeamarksOverlay);
// mMapView.invalidate();
}
mapview只显示SeamarksOverlay(openseamap),但不显示主要的mMapnikTileSource(openstreetmap)。我必须重新启动应用程序才能使mapview正确显示所有内容。
我在stackoverflow上看到了类似的question,但它还没有被回答。
任何人都可以帮助我吗?提前谢谢。
答案 0 :(得分:0)
我会给出与其他相关问题相同的答案。在加载和显示mapview之前,您必须要求权限。
或者,或者磁贴存储缓存的路径是只读的。在某些Android设备上Environment.getExternalStorageDir
返回一个只读分区。不知道为什么,但这肯定会引起问题。它可以用类OpenStreetMapTileProviderConstants