使用osmdroid而无法访问外部存储

时间:2016-08-18 13:36:42

标签: android storage android-permissions osmdroid

在我的应用中,我使用osmdroid处理地图。地图图块会下载并保存在 / storage / osmdroid 中。该应用程序需要权限 WRITE_EXTERNAL_STORAGE READ_EXTERNAL_STORAGE 。如果我拒绝访问存储空间,则不会显示地图。有没有办法显示地图而无法访问手机内存?

3 个答案:

答案 0 :(得分:4)

https://github.com/osmdroid/osmdroid/wiki/FAQ

在维基媒体上新鲜出炉。是的,您可以将位置更改为应用程序专用存储,在这种情况下,它应该可以正常工作。专业提示:在加载任何地图视图之前设置这些。

OpenStreetMapTileProviderConstants.setCachePath(...) OpenStreetMapTileProviderConstants.setCacheSizes(...) OpenStreetMapTileProviderConstants.setOfflineMapsPath(...) OpenStreetMapTileProviderConstants.setUserAgentValue(...)

更新: 较新版本的osmdroid,从5.6及以上开始使用以下

Configuration.getInstance().setCachePath(...) Configuration.getInstance().setCacheSizes(...) Configuration.getInstance().setOfflineMapsPath(...) Configuration.getInstance().setUserAgentValue(...)

答案 1 :(得分:2)

为解决此问题,我仅在应用程序类中添加了下一个代码:

        @Override
            public void onCreate() {
            ...
            org.osmdroid.config.IConfigurationProvider osmConf = org.osmdroid.config.Configuration.getInstance();
            File basePath = new File(getCacheDir().getAbsolutePath(), "osmdroid");
            osmConf.setOsmdroidBasePath(basePath);
            File tileCache = new File(osmConf.getOsmdroidBasePath().getAbsolutePath(), "tile");
            osmConf.setOsmdroidTileCache(tileCache);
            ...
        }

答案 2 :(得分:0)

您问题的实际答案是否定的。 OSMDroid需要缓存切片才能工作。

因此,您需要正确的权限,或者必须更改路径,如spy和Dima所建议。

另外,如果您具有正在运行的系统并已更新至Android 10,则可能会遇到Unable to start the sqlite tile writer. Check external storage availability.异常。原因可能是scoped external storage

最简单的解决方法是退回旧文件访问:

<manifest ... >
  <!-- This attribute is "false" by default on apps targeting
       Android 10 or higher. -->
  <application android:requestLegacyExternalStorage="true" ... >
    ...
  </application>
</manifest>