使用KitKat存储访问框架后,打开Goog​​le云端硬盘文件内容URI

Kei*_*oth 23 android google-drive-api storage-access-framework

我正在使用Android 4.4的存储访问框架并打开文件选择器.

一切正常,除非从Google云端硬盘中选择文件,我只能弄清楚如何将其作为输入流打开,但我想获得一个java File对象.

返回的内容uri看起来像这样:content://com.google.android.apps.docs.storage/document/acc%3D4%3Bdoc%3D2279

其他类似的问题,但没有一个工作解决方案,允许我获取文件名,文件大小和内容:

我还研究了Paul Burke的FileChooser(https://github.com/iPaulPro/aFileChooser),这是该问题列表中最常见的问题.

如何从该内容获取文件?

我目前的解决方法是从输入流写出一个临时文件.

谢谢!

Kei*_*oth 34

好.我发现正确的方法是使用来自其他帖子的输入流以及来自contentresolver的一些数据.

这里有参考难以找到的android文档:https://developer.android.com/training/secure-file-sharing/retrieve-info.html

获取mimetype,filename和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)));
Run Code Online (Sandbox Code Playgroud)

并获取文件内容:

getContentResolver().openInputStream(uri)
Run Code Online (Sandbox Code Playgroud)

希望这有助于其他人.

  • 您找到了mimeType,但没有使用它。您使用参数“ uri”调用“ .openInputStream”,但尚未告诉我们如何获取该变量。一些更多的信息将不胜感激。 (2认同)