Android 使用mimetype';应用程序/八位字节流';使用SAF picker可用于本地文件,但不适用于Google Drive中的相同文件

Android 使用mimetype';应用程序/八位字节流';使用SAF picker可用于本地文件,但不适用于Google Drive中的相同文件,android,mime-types,storage-access-framework,Android,Mime Types,Storage Access Framework,我正在重构我的备份/恢复功能,以便与存储访问框架配合使用。我的备份是带有自定义扩展名(.dtt)的zip文件。如果我尝试用以下代码打开选择器,我的.dtt文件可以从本地下载目录中选择,但不能从Google Drive中的目录中选择。我如何使文件甚至可以从Google Drive中选择 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); inte

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

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 Drive“备份”目录中变灰:


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

我找到了一个可行的解决方案。Google Drive似乎在上传文件时将其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);

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

你可以用这个工具窥探他们的意图:@MarcinOrlowski不幸的是,它没有领会NovaLauncher使用的意图。在SAF选择器打开之前,我没有得到任何类型的选择器。
intent.setType(“*/*”
@blackapps我可以,但我希望选取者将不是我的备份文件的文件灰显出来。NovaLauncher以某种方式做到了这一点(或者至少他们的实现使大多数其他文件变灰,因为它仍然允许其他二进制文件通过)。但是为什么您的文件不在一个特定的目录中呢。那你就不会有那个问题了。