2015-04-18 9 views
5

mia app download e decomprime un file in una cartella specifica:come ottenere il percorso reale con l'intento ACTION_OPEN_DOCUMENT_TREE. API Lollipop 21 & 22

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

Con il nuovo Intent ACTION_OPEN_DOCUMENT_TREE introdotto vorrei offrire all'utente di scegliere quella cartella.

Durante il test dei valori ricevuti nel mio onActivityResult, ottengo un percorso come /tree/primary:mynewfolder, che non è il percorso fisico reale come/sdcard/mynewfolder.

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

mio metodo decomprimere bisogno del vero e proprio percorso:

ZipFile zipFile = new ZipFile(realpath); 

Come faccio ad avere il percorso reale come/sdcard/MyNewFolder dal previsto URI Lollipop (API 21 & 22)?

risposta

9

processo di ottenere vero e proprio percorso da URI è uguale a prima, ma con un po 'di più:

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

Il nocciolo della getPath() con metodi intermedi può essere trovato qui: getPath()

+0

Grazie a molto, questo è quello che stavo cercando. Perfetto! Se ti piace, puoi rispondere anche a questa domanda simile e accetterò. http://stackoverflow.com/questions/29775068/open-a-sqlite-database-when-choosing-folder-with-action-open-document-tree –

+0

My Pleasure, Felice che mi ha aiutato, ho postato la risposta lì come bene! –

+0

Non sembra funzionare sui percorsi della scheda SD. Come ha funzionato per te? Per me si blocca, come restituito null (ma ha identificato che si tratta di un tipo di archiviazione esterna). –

Problemi correlati