J'utilise Storage Access Framework pour Android 4.4 et ouvre le sélecteur de fichiers.
Tout fonctionne, sauf lorsque vous choisissez un fichier dans Google Drive. Je ne peux que comprendre comment l'ouvrir en tant que flux d'entrée, mais j'aimerais obtenir un objet Fichier Java.
Le contenu de l'URI renvoyé ressemble à ceci: content: //com.google.Android.apps.docs.storage/document/acc%3D4%3Bdoc%3D2279.
D'autres questions similaires, mais ne disposant pas d'une solution efficace, me permettent d'obtenir le nom du fichier, sa taille et son contenu:
J'ai également examiné FileChooser de Paul Burke ( https://github.com/iPaulPro/aFileChooser ) et c'est la question la plus courante de la liste du problème.
Comment puis-je obtenir un fichier à partir de ce contenu uri?
Ma solution actuelle consiste à écrire un fichier temporaire à partir d'un flux d'entrée.
Merci!
D'accord. J'ai trouvé que le bon moyen consiste à utiliser le flux d'entrée des autres publications en conjonction avec certaines données du contentresolver.
Pour référence, voici les documents Android difficiles à trouver: https://developer.Android.com/training/secure-file-sharing/retrieve-info.html
Le code approprié pour obtenir le type MIME, le nom du fichier et la taille du fichier:
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)));
Et pour obtenir le contenu du fichier:
getContentResolver().openInputStream(uri)
J'espère que ceci aide quelqu'un d'autre.
ce code a résolu mon problème, lorsque j'ai essayé de sélectionner l'image de google drive, l'application s'est écrasée,
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();
}