osmdroid和棉花糖的动态权限

时间:2016-09-30 17:36:32

标签: osmdroid

我在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,但它还没有被回答。

任何人都可以帮助我吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我会给出与其他相关问题相同的答案。在加载和显示mapview之前,您必须要求权限。

或者,或者磁贴存储缓存的路径是只读的。在某些Android设备上Environment.getExternalStorageDir返回一个只读分区。不知道为什么,但这肯定会引起问题。它可以用类OpenStreetMapTileProviderConstants

覆盖