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.
- Error al iniciar sesión en la cuenta especificada. Elija una cuenta diferente
- Google Drive + ACTION_GET_CONTENT
- Error de ConnectionRequire de la API de Google Drive para Android
- No se puede descargar el archivo creado por mi aplicación en Google Drive, pero puede obtener los metadatos de ese archivo
- Java.lang.NoClassDefFoundError: com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential
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!
- Cómo subir FILE_URI con Google Drive API: Insertar archivo
- Iniciar sesión en Google Drive en Android sin agregar la cuenta de Google al dispositivo
- ¿Cómo crear carpetas en Google Drive sin duplicar?
- Guardar archivo en una carpeta específica con Google Drive SDK
- API de Google Drive para Android: sólo Drive.SCOPE_FILE acceso, solo necesita lectura
- SDK de Google Drive para OCR
- Seleccionar la imagen de sdcard y almacenarla en Google Drive
- Cómo reducir el código - 65k método límite en dex
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.
- Mostrar la fecha Y la hora en la configuración regional del usuario
- Agregar elementos a un diseño relativo de forma programática