Howto para obtener el camino real con ACTION_OPEN_DOCUMENT_TREE intención. Lollipop API 21 & 22

Mi aplicación descarga y descomprime un archivo en una carpeta específica:

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

Con el nuevo ACTION_OPEN_DOCUMENT_TREE intención que me gustaría ofrecer al usuario para elegir esa carpeta.

Al probar los valores recibidos en mi onActivityResult, obtengo un Path como /tree/primary:mynewfolder , que no es la ruta real física como / sdcard / mynewfolder.

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

Mi método de descomprimir necesita la ruta real:

 ZipFile zipFile = new ZipFile(realpath); 

¿Cómo obtengo la ruta real como / sdcard / mynewfolder del URI proporcionado en Lollipop (API 21 y 22)?

Proceso de obtener el camino real de URI es igual que antes, pero con un poco de adición:

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

La esencia del método getPath () con métodos intermedios se puede encontrar aquí: getPath ()

  • Android nivel 21 compatibilidad hacia atrás? (Desde que salió la nueva actualización del SDK)
  • Esquema host no funciona en androide lollipop, haga clic en el enlace para abrir la aplicación
  • Android Ripple Effect + Elevación en las vistas que no son de botón
  • Establecer windowTranslucentStatus = true cuando android lollipop o superior
  • Android L está ignorando las formas como fondo dibujable
  • Cómo puedo cambiar el color de texto del botón de diálogo predeterminado en android 5
  • Cambiar el tinte de los iconos de la barra de estado
  • Modo de Acción Contextual no filtrar toques
  • Java.lang.OutOfMemoryError en Android 5.0, causado por una asignación de 16k cuando 5M está disponible
  • ¿Existen APIs / Samples / Tutorials oficiales para implementar las nuevas directrices de Material-Diseño?
  • Formas de anillo para la vista previa L no funciona
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.