Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using osmdroid without getting access to external storage

In my app I am using osmdroid for working with map. Map tiles are downloaded and kept in /storage/osmdroid. The application requires permissions WRITE_EXTERNAL_STORAGE and READ_EXTERNAL_STORAGE. If I deny access to storage, map is not shown. Is any way to show map without access to phone memory?

like image 294
estique Avatar asked Aug 18 '16 13:08

estique


2 Answers

For solving this problem I just added into my application class next code:

        @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);
            ...
        }

This code changes the path of OSM cache from external to internal( getCacheDir())

like image 92
Dima Kozhevin Avatar answered Nov 20 '22 22:11

Dima Kozhevin


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

Fresh off the wiki press. Yes you can change the location to application private storage, in which case it should work just fine. Pro tip: set these before loading any map views.

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

Update: Newer versions of osmdroid, starting in 5.6 and up use the following

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

like image 8
spy Avatar answered Nov 20 '22 21:11

spy