Abrir un URI de contenido de archivo de Google Drive después de usar KitKat Storage Access Framework

Estoy utilizando el marco de acceso de almacenamiento para android 4.4 y abrir el selector de archivos.

Todo funciona, excepto al elegir un archivo de Google Drive, sólo puedo averiguar cómo abrirlo como un flujo de entrada, pero me gustaría obtener un objeto de archivo java.

El contenido uri que se está devolviendo se parece a esto: content: //com.google.android.apps.docs.storage/document/acc%3D4%3Bdoc%3D2279

Otras preguntas que son similares, pero no tienen una solución de trabajo que me permite obtener el nombre de archivo, tamaño de archivo y el contenido:

  • Obtenga una ruta real desde URI, Android KitKat nuevo marco de acceso de almacenamiento
  • Galería de Android en KitKat devuelve diferentes Uri para Intent.ACTION_GET_CONTENT

También he mirado en FileChooser de Paul Burke ( https://github.com/iPaulPro/aFileChooser ) y ésta es la pregunta más común en la lista del problema.

¿Cómo puedo obtener un archivo de ese contenido uri?

Mi solución actual es escribir un archivo temporal de un inputtream.

¡Gracias!

De acuerdo. Encontré que la manera correcta es utilizar la corriente de entrada de los otros postes junto con algunos datos del contentresolver.

Para referencia aquí están los documentos difíciles de encontrar en Android: https://developer.android.com/training/secure-file-sharing/retrieve-info.html

El código relevante para obtener mimetype, filename y filesize:

Uri returnUri = returnIntent.getData(); String mimeType = getContentResolver().getType(returnUri); Cursor returnCursor = getContentResolver().query(returnUri, null, null, null, null); int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME); int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE); returnCursor.moveToFirst(); TextView nameView = (TextView) findViewById(R.id.filename_text); TextView sizeView = (TextView) findViewById(R.id.filesize_text); nameView.setText(returnCursor.getString(nameIndex)); sizeView.setText(Long.toString(returnCursor.getLong(sizeIndex))); 

Y para obtener el contenido del archivo:

 getContentResolver().openInputStream(uri) 

Espero que esto ayude a alguien más.

  • La aplicación de Google Play Store con la unidad de Google sdk muestra siempre la opción "Elegir cuenta"
  • ¿Cómo obtener el nombre de archivo y la ruta real del documento de unidad de Google?
  • Error de la carpeta principal no válida para AppFolder en Drive API
  • ¿Cómo crear carpetas en Google Drive sin duplicar?
  • GooglePlayServices no está disponible debido al error 2
  • No se puede crear un archivo dentro de una carpeta pública en Google Drive
  • El detector de progreso de subida no se disparó (API de unidad de Google)
  • SDK de Google Drive para OCR
  • Ejemplos de proyectos sobre la copia de seguridad del archivo y las fotos de Sqlite en Google Drive mediante programación en Android
  • Google Drive API - Android - ¿Cómo obtener un ID de unidad de disco?
  • Fecha de la modificación de la unidad de google dar tiempo incorrecto
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.