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ść:
- Get real path from URI, Android KitKat new storage access framework
- Galeria Androida na KitKat zwraca inny Uri dla intencji.ACTION_GET_CONTENT
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!
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.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();
}
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