Как получить реальный путь с действием OPEN DOCUMENT TREE Intent?

мое приложение загружает и распаковывает файл в определенной папке:

output = new FileOutputStream(realpath, true);
output.write(buffer, 0, bytesRead);

ZipFile zipFile = new ZipFile(realpath);

С Новым представил ACTION_OPEN_DOCUMENT_TREE намерение, Я хотел бы предложить пользователю выбрать эту папку.

при тестировании значений, полученных в my onActivityResult, Я получаю путь как /tree/primary:mynewfolder, который не является физическим реальным путем, как /sdcard/mynewfolder.

Uri treeUri = data.getData();
String sPath = treeUri.getPath();
Log.v("Path from Tree ", sPath);

мой метод распаковки нужен реальный путь:

ZipFile zipFile = new ZipFile(realpath);

как мне получить реальный путь, как /sdcard/mynewfolder из предоставленного URI в Леденец на палочке (API 21 и 22)?

1 ответов


процесс получения реального пути из URI такой же, как и раньше, но с небольшим добавлением:

Uri uri = data.getData();
Uri docUri = DocumentsContract.buildDocumentUriUsingTree(uri, 
                        DocumentsContract.getTreeDocumentId(uri));
String path = getPath(this, docUri);

суть метода getPath () с промежуточными методами можно найти здесь: getPath()