2015-04-18 119 views
5

我的應用程序下載和解壓在一個特定文件夾的文件:如何使用ACTION_OPEN_DOCUMENT_TREE Intent獲取真實路徑。棒棒堂API 21 22

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

隨着新推出ACTION_OPEN_DOCUMENT_TREE意圖,我想向用戶提供選擇的文件夾。

當測試我的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); 

我如何像所提供的URI/SD卡/ mynewfolder現實路徑棒棒堂(API 21 & 22)?

回答

9

從URI得到真正的路徑的過程是與以前一樣,但有一點增加:

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

的getPath()方法用中間體的方法的要點可以在這裏找到:getPath()

+0

由於一個很多,這就是我正在尋找的。完美!如果你喜歡,你也可以回答這個類似的問題,我會接受。 http://stackoverflow.com/questions/29775068/open-a-sqlite-database-when-choosing-folder-with-action-open-document-tree –

+0

我的快樂,很高興幫助,我已經在那裏發佈答案好! –

+0

它似乎不適用於SD卡路徑。它是如何爲你工作的?對我來說,它會崩潰,因爲它返回null(但它確定它是一個外部存儲類型)。 –