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

Using mimetype 'application/octet-stream' with SAF picker works for local files but not for the same files in Google Drive

我正在重构我的 backup/restore 功能以使用存储访问框架。我的备份是带有自定义扩展名 (.dtt) 的 zip 文件。如果我尝试使用以下代码打开选择器,我的 .dtt 文件可以从本地下载目录中选择,但不能从 Google 驱动器中的目录中选择。如何使文件甚至可以从 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);

注意如何从本地 "Downloads" 目录中选择备份文件,但在 Google 驱动器 "backups" 目录中显示为灰色:

我知道这种行为是可以实现的,因为 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);

如果有更好的解决方案,或者这个解决方案有什么问题,我很想听听。