open chooser android google-drive-sdk storage-access-framework

open - android file chooser



Abra un URI de contenido de archivos de Google Drive después de usar KitKat Storage Access Framework (2)

Estoy usando Storage Access Framework para Android 4.4 y abro el selector de archivos.

Todo funciona, excepto cuando se elige un archivo de Google Drive, solo puedo descubrir cómo abrirlo como una secuencia de entrada, pero me gustaría obtener un objeto java File.

El contenido del uri que se está devolviendo se ve así: content: //com.google.android.apps.docs.storage/document/acc%3D4%3Bdoc%3D2279

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

También he buscado en FileChooser de Paul Burke ( https://github.com/iPaulPro/aFileChooser ) y esta 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 desde un flujo de entrada.

¡Gracias!


De acuerdo. Descubrí que la forma correcta es utilizar el flujo de entrada de las otras publicaciones junto con algunos datos del solucionador de contenido.

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

El código relevante para obtener mimetype, nombre de archivo y tamaño de archivo:

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.


este código resolvió mi problema, cuando intenté seleccionar una imagen de Google Drive, la aplicación se bloqueó,

private void setImagePath(Intent data) throws Exception { String wholeID=""; Uri selectedImage = data.getData(); if(Build.VERSION.SDK_INT<=Build.VERSION_CODES.JELLY_BEAN_MR2){ wholeID=getUriPreKitkat(selectedImage); }else { wholeID = DocumentsContract.getDocumentId(selectedImage); } // Split at colon, use second item in the array Log.i("debug","uri google drive "+wholeID); String id = wholeID.split(":")[1]; String[] column = {MediaStore.Images.Media.DATA}; // where id is equal to String sel = MediaStore.Images.Media._ID + "=?"; Cursor cursor = getActivity().getContentResolver(). query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, column, sel, new String[]{id}, null); int columnIndex = cursor.getColumnIndex(column[0]); if (cursor.moveToFirst()) { filePath = cursor.getString(columnIndex); } cursor.close(); }