Мое приложение загружает и распаковывает файл в определенной папке:
output = new FileOutputStream(realpath, true); output.write(buffer, 0, bytesRead); ZipFile zipFile = new ZipFile(realpath);
С новым введением ACTION_OPEN_DOCUMENT_TREE Intent я хотел бы предложить пользователю выбрать эту папку.
При тестировании значений, полученных в моем 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 в Lollipop (API 21 и 22)?
Процесс получения реального пути из URI аналогичен предыдущему, но с небольшим добавлением:
Uri uri = data.getData(); Uri docUri = DocumentsContract.buildDocumentUriUsingTree(uri, DocumentsContract.getTreeDocumentId(uri)); String path = getPath(this, docUri);
Суть метода getPath () с промежуточными методами можно найти здесь: getPath ()