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.

  • Google Drive GET_CONTENT archivo de lectura de intenciones
  • Subir archivo de texto a Google Drive mediante Android
  • ¿Cómo puedo cambiar cuentas en la NUEVA API de Google Drive para Android?
  • Cómo subir una copia de seguridad del teléfono Llamar / sms / contactos a Google Cloud
  • Google Drive en error android: java.lang.IllegalArgumentException: el nombre no debe estar vacío: null
  • ID de cliente del SDK de Google Drive
  • Error: GooglePlayServicesUtil: Se ha producido un error interno. Consulte los registros para obtener información detallada. ¿Cómo puedo solucionar esto?
  • Cómo descargar el archivo de la unidad de google en android
  • Enumeración de carpetas y archivos con Google Drive SDK V2
  • ¿Cancelar la carga de Google Drive posible?
  • Autorizar mi aplicación para usar una carpeta existente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.