在原生 Android 文件选取器中按 mimetype 或扩展进行筛选

在Android中,可以使用 Intent 打开本机文件选取器并选择例如一个文件。这是通过使用以下代码将 mime 类型设置为实现的:ACTION_OPEN_DOCUMENT.mp4video/mp4

public static void pickFile(Context mContext, int REQUEST_CODE) {
        Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        intent.setType("video/mp4");  
        ((Activity) mContext).startActivityForResult(intent, REQUEST_CODE);
    }

在我的项目中,我想选择一个自定义扩展文件,其哑剧类型在Android的MimeTypeMap中是未知的,例如.qgs或.dcm文件。

为了解决这个问题,我看到了两种可能性,到目前为止,我们未能实现:

  1. 按意向中的扩展名进行筛选ACTION_OPEN_DOCUMENT
  2. 将新的哑剧类型注册到Android,以便它可以与意图一起使用ACTION_OPEN_DOCUMENT

这些选项中的任何一个是否可行以及如何可行?还是我没有编写自己的文件选取器编码而错过的其他方法?


答案 1

您可以尝试创建自定义文件选取器并传递挂载存储点,并以递归方式迭代所有文件类型:

public void scanFiles(File file) {
File[] fileArray = file.listFiles(); 
for (File f : fileArray){
    if (f.isDirectory()) 
      scanFiles(f);
    if (f.isFile() && (f.getpath().endswith("..qgs") || //any extensions)) {
        //Add to your list 
       }
    }
}

并使用进程构建器和挂载命令调用Android中所有挂载点的扫描文件,您可以为希望支持的所有挂载点添加检查。


答案 2

可以使用ACTION_OPEN_DOCUMENT Intent 打开本机文件选取器

这不是一个“文件选择器”。不要求设备上的每个人都提供恰好是文件的文档。DocumentsProvider

我想选择一个自定义扩展文件,其哑剧类型在Android的MimeTypeMap中未知,例如.qgs或.dcm文件

不要求设备上的每个人都使用具有其文件文件名的文档。您看到的名称是“显示名称”,虽然对于某些提供程序,它们将是文件名,但对于其他提供程序,它们可以是提供程序所需的任何内容。DocumentsProvider

这两个选项中的任何一个是否可行

不。

还是我没有编写自己的文件选取器编码而错过的其他方法?

如果只需要文件,则库中提供了大量现有的文件选取器实现。 当您想要使用所有可能的文档源(可移动存储,云提供商等)而不仅仅是文件时,它就是存在的。ACTION_OPEN_DOCUMENT


推荐