Otwórz URI zawartości pliku Dysku Google po użyciu KitKat Storage Access Framework

Używam Storage Access Framework dla Androida 4.4 i otwieram próbnik plików.

Wszystko działa poza wyborem pliku z Dysku Google, mogę tylko dowiedzieć się, jak otworzyć go jako strumień wejściowy, ale chciałbym uzyskać obiekt pliku java.

Zwracany adres URL zawartości wygląda mniej więcej tak: content: / / com.google.android.aplikacje.docs.storage/document / acc%3D4%3bdoc%3d2279

Inne pytania, które są podobne, ale nie mają pracy rozwiązanie, które pozwala mi uzyskać nazwę pliku, Rozmiar pliku i zawartość:

Zajrzałem również do Filechooser Paula Burke ' a ( https://github.com/iPaulPro/aFileChooser ) i to jest najczęstsze pytanie na liście problemu.

Jak mogę pobrać plik z tej zawartości uri?

Moim obecnym obejściem jest zapisanie pliku tymczasowego ze strumienia wejściowego.

Dzięki!

Author: Community, 2014-08-07

2 answers

Ok. Odkryłem, że właściwym sposobem jest użycie strumienia wejściowego z innych postów w połączeniu z niektórymi danymi z contentresolver.

Dla odniesienia tutaj są trudne do znalezienia android docs: https://developer.android.com/training/secure-file-sharing/retrieve-info.html

Odpowiedni kod do pobrania mimetype, filename i 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)));

I aby pobrać zawartość pliku:

getContentResolver().openInputStream(uri)
Mam nadzieję, że to pomoże komuś innemu.
 31
Author: Keith Entzeroth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-14 11:53:57

Ten kod rozwiązał mój problem, gdy próbowałem wybrać obraz z Dysku google, Aplikacja się zawiesza,

 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();

    }
 0
Author: Adeeb karim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-26 16:20:46