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.
- Seleccionar la imagen de sdcard y almacenarla en Google Drive
- Los datos de intención son nulos onactivityresult después de seleccionar la cuenta en google drive api en android
- Obtener nombre de usuario, avatar de google account
- Android: accede a la carpeta de aplicaciones de Google Drive desde otro dispositivo, pero la misma aplicación
- UsingOAuth2 obsoleta?
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 configurar las credenciales de Google Drive en la aplicación de Android?
- Google Drive GET_CONTENT archivo de lectura de intenciones
- Google Drive + ACTION_GET_CONTENT
- Excepción de autenticación de Google Drive: ¿necesita permiso? (V2)
- Android google unidad de inicio rápido muestra la imagen de carga falla
- API de Google Drive para Android: comprueba si existe una carpeta
- Excepción java.lang.NoClassDefFoundError: com.google.android.gms.common.AccountPicker
- Autorizar mi aplicación para usar una carpeta existente
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