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 ()

  • Excepción; No se puede establecer la propiedad de la solicitud después de realizar la conexión; Se produce en Android Lollipop HTC M8
  • ProgressBar Circle no muestra progreso en Android L (API 21)
  • ¿Hay una intención de desinstalación de una aplicación para TODOS los usuarios?
  • Android ImageReader.acquireLatestImage devuelve JPG no válido
  • Android: Fondo de degradado de AppBarLayout
  • Posicione ejecutables independientes y Android Lollipop
  • ¿Qué hay de nuevo en Drawable Tinting en Android L Developer Preview en comparación con la versión anterior?
  • Logcat en android L no se borra después de desconectar y volver a conectar
  • Android 5.0 Regiones de recorte incorrectas en la superficie de vista previa y capturada imagen fija
  • NullPointerException: int android.support.v4.app.FragmentManagerImpl.mCurState Referencia de objeto null
  • Aplicar diseño de material táctil ondulación a ImageButton?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.