Как изменить путь osmdroid по умолчанию на extSdCard?

#android #openstreetmap #osmdroid

#Android #openstreetmap #osmdroid

Вопрос:

Я хотел бы знать, как изменить путь osmdroid по умолчанию на путь extSdCard?
согласно документации, это возможно с помощью:

 Configuration.getInstance().SetOsmdroidBasePath();
 

Я считаю, что при запуске моего проекта он автоматически запускается по пути:
StorageUtils.getStorage().GetAbsolutePath() , «osmdroid»

Я попытался использовать приведенную ниже команду, но на моей карте не отображаются плитки

 Configuration.getInstance().setOsmdroidBasePath(new File("/mnt/extSdCard/osmdroid"));
 

И когда я отлаживаю свой код, используя это: Configuration.getInstance().GetOsmdroidBasePath().GetPath()

Он представляет правильный путь.

Необходимо выполнить некоторую перезагрузку моей карты?

Ответ №1:

Если пользователь предоставил разрешения времени выполнения для хранения до создания представления карты, то он должен работать нормально. Возможно, вы захотите проверить, можете ли вы записывать по этому пути. Android странный, и часто только потому, что путь доступен, не означает, что вы можете на него записывать. StorageUtils Класс может помочь вам найти доступные пути, и он должен быть в состоянии определить, какой путь доступен для записи. Однако он несовершенен. Пути могут варьироваться от устройства к устройству, и результаты могут быть непредсказуемыми.просмотр этой ссылки может вам помочь.

Комментарии:

1. Привет, шпион, я пытался выполнить то, что вы предложили, но ошибок не возникло. Но мои плитки не отображались на карте, необходимо было бы сохранить или загрузить найденные в Configuration.getInstance() методы. И да, когда я перечисляю файлы, найденные в каталоге, он представляет меня правильно. используя StorageUtils.getAllStorageLocations().get(«sdCard»).getPath()

2. Configuration.getInstance().setosmdroid basePath(новый файл(StorageUtils.getAllStorageLocations().get(«sdCard»).getPath(), «osmdroid»));

3. Моя ошибка в указании плиток в автономном режиме, спасибо за вашу помощь.

Ответ №2:

Для OSM версии 6.x вы можете использовать следующий код

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