android - 使用 KitKat 存储访问框架后打开 Google Drive File Content URI

标签 android google-drive-api storage-access-framework

我正在使用适用于 android 4.4 的存储访问框架并打开文件选择器。

除了从 Google Drive 中选择文件外,一切正常,我只能弄清楚如何将其作为输入流打开,但我想获得一个 java File 对象。

返回的内容 uri 如下所示:content://com.google.android.apps.docs.storage/document/acc%3D4%3Bdoc%3D2279

其他类似但没有可让我获取文件名、文件大小和内容的有效解决方案的问题:

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

如何从该内容 uri 中获取文件?

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

谢谢!

最佳答案

好的。我发现正确的方法是将来自其他帖子的输入流与来自 contentresolver 的一些数据结合使用。

这里有一些很难找到的 android 文档供引用:https://developer.android.com/training/secure-file-sharing/retrieve-info.html

获取mimetype、文件名和文件大小的相关代码:

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

并获取文件内容:

getContentResolver().openInputStream(uri)

希望这对其他人有所帮助。

关于android - 使用 KitKat 存储访问框架后打开 Google Drive File Content URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25171246/

相关文章:

java - 如果我正在为 Android 开发,什么是好的脚本语言?

python - 如何列出 Google 云端硬盘文件夹的所有文件、文件夹、子文件夹和子文件

java - 如何使用 Drive SDK 列出域中的所有 Google 文档?

android - 使用存储访问框架创建文件

使用 SAF(存储访问框架)的 Android SD 卡写入权限

Android - 使用 SurfaceView 和 Camera2 API 处理屏幕方向

php - 安卓PHP服务器

php - 使用 volley 和 php 在 android 中发布 utf8(波斯语或阿拉伯语)

android - 如何通过 Glass 上的驱动授权许可页面?