在我的应用中,我使用osmdroid来处理地图。地图瓦片被下载并保存在/storage/osmdroid目录下。该应用程序需要WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE权限。如果我拒绝存储访问权限,地图将无法显示。是否有不需要访问手机内存即可显示地图的方法?
在我的应用中,我使用osmdroid来处理地图。地图瓦片被下载并保存在/storage/osmdroid目录下。该应用程序需要WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE权限。如果我拒绝存储访问权限,地图将无法显示。是否有不需要访问手机内存即可显示地图的方法?
为了解决这个问题,我只需将下一行代码添加到我的应用程序类中:
@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);
...
}
这段代码将OSM缓存路径从外部改为内部(getCacheDir()
)
https://github.com/osmdroid/osmdroid/wiki/FAQ
这是最新的wiki页面。您可以将位置更改为应用程序的私有存储空间,这样就应该可以正常工作。专业提示:在加载任何地图视图之前设置这些参数。
OpenStreetMapTileProviderConstants.setCachePath(...)
OpenStreetMapTileProviderConstants.setCacheSizes(...)
OpenStreetMapTileProviderConstants.setOfflineMapsPath(...)
OpenStreetMapTileProviderConstants.setUserAgentValue(...)
更新: osmdroid 5.6及以上版本使用以下代码:
Configuration.getInstance().setCachePath(...)
Configuration.getInstance().setCacheSizes(...)
Configuration.getInstance().setOfflineMapsPath(...)
Configuration.getInstance().setUserAgentValue(...)
<manifest ... >
<!-- This attribute is "false" by default on apps targeting
Android 10 or higher. -->
<application android:requestLegacyExternalStorage="true" ... >
...
</application>
</manifest>
/storage/osmdroid
。是谁决定了这个存储位置? - greenapps