Как объединить путь строки с документом дерева URI без ограничения разрешений при использовании ACTION_OPEN_DOCUMENT_TREE - PullRequest
0 голосов
/ 07 апреля 2020

Из-за ограничения Storage Access Framework в android Мне нужен полный доступ (чтение) к набору файлов, начиная с запуска ACTION_OPEN_DOCUMENT_TREE, чтобы позволить пользователю выбрать каталог.

Проблема

В моем сценарии мне нужно что-то вроде этого:

"file: // directory_choose_by_user / {z} / {x} / {y}. png ".

Когда пользователь выбирает каталог, я могу получить доступ ко всем файлам каталога, но когда я конвертирую URI в строку реального пути, у меня нет разрешения на доступ к файлам. Итак, как я могу создать путь "file: // directory_choose_by_user / {z} / {x} / {y} .png", хотя предоставляется доступ к файлам и папкам.

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

startActivityForResult(Intent.createChooser(intent, "pleas select a directory contains xzy tiles"), request4Raster)

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {            
            case request4Raster:
                Uri tilePathUri = data.getData();
                addLocalRasterTile(tilePathUri);
                break;
        }
    }
}

и когда я использую URI пути:

private void addLocalRasterTile(Uri tilePathUri) {

    RasterSource topoSource = new RasterSource("testTileSource",
            new TileSet("tileset", "file://..../ {z}/{x}/{y}")); // this is my problem/ ... ==> real path of URI

 mapboxMap.getStyle().addSource(topoSource);
 RasterLayer topoLayer = new RasterLayer("testTileLayer",
 "testTileSource");
 mapboxMap.getStyle().addLayer(topoLayer);

}
...