android - 将 mimetype 'application/octet-stream' 与 SAF 选择器一起使用适用于本地文件,但不适用于 Google Drive 中的相同文件

标签 android mime-types storage-access-framework

我正在重构我的备份/恢复功能以使用存储访问框架。我的备份是带有自定义扩展名 (.dtt) 的 zip 文件。如果我尝试使用以下代码打开选择器,我的 .dtt 文件可以从本地下载目录中选择,但不能从 Google Drive 中的目录中选择。如何使文件甚至可以从 Google 云端硬盘中选择?

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("application/octet-stream");
startActivityForResult(intent, OPEN_SAF_PICKER_REQUEST_CODE);

注意如何从本地“下载”目录中选择备份文件,但在 Google 云端硬盘“备份”目录中显示为灰色:

local Downloads directory

Google Drive directory

我知道这种行为是可以实现的,因为 NovaLauncher 的恢复功能运行正常。

最佳答案

我找到了可行的解决方案。看起来 Google 云端硬盘在上传文件时将我的文件的 mime 类型更改为“application/x-zip”。所以我需要考虑这两种 MIME 类型,以便让我的文件在两个地方都可选择:

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
String[] mimeTypes = {"application/octet-stream","application/x-zip"};
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
startActivityForResult(intent, OPEN_SAF_PICKER_REQUEST_CODE);

如果有更好的解决方案,或者这个解决方案存在某种问题,我很乐意听到。

关于android - 将 mimetype 'application/octet-stream' 与 SAF 选择器一起使用适用于本地文件,但不适用于 Google Drive 中的相同文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61516204/

相关文章:

android - SAF DocumentFile - 检查路径是否存在而不在每个文件夹级别创建每个 DocumentFile

android - 从存储访问框架 UI 获取文件夹后保存图像

android - 在 Android 11 上编写许多文件

java - BitmapFactory类型中的方法decodeResource(Resources, int)不适用于Android中的参数(Resources, String)

android - Firebase Crashlytics 无法在 Firebase 控制台中报告崩溃

java - Intent 不提取额外的

text - 文本的应用程序/普通 MIME 类型?

java - 每个联系人都有一个电话号码的光标

java - 电子邮件内容中的精确字符串对齐检索

jquery - 维基百科 API JSONP 请求被阻止 mime 类型不匹配