在原生Android文件选择器中按mimetype或extention进行过滤

时间:2015-12-15 07:39:15

标签: java android android-intent mime-types filepicker

在Android中,可以使用.mp4 Intent 打开本机文件选择器并选择例如video/mp4文件。通过使用以下代码将mime类型设置为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); } 来实现此目的:

ACTION_OPEN_DOCUMENT

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

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

  1. ACTION_OPEN_DOCUMENT意图
  2. 中按扩展名过滤
  3. 向android注册一个新的mime类型,以便它可以与CREATE TABLE testInnoDb1 ( c1 int(11) PRIMARY KEY ) ENGINE=InnoDB; CREATE TABLE testInnoDb2 ( c1 int(11) PRIMARY KEY, FOREIGN KEY (c1) REFERENCES testInnoDb1(c1) ON UPDATE CASCADE ON DELETE CASCADE ) ENGINE=InnoDB; INSERT INTO testInnoDb1 (c1) VALUES (42); INSERT INTO testInnoDb2 (c1) VALUES (42); -- INSERT INTO testInnoDb2 (c1) VALUES (64); -- This will fail -- UPDATE testInnoDb2 SET c1=128; -- This will fail Intent一起使用
  4. 这些选项是否可行以及如何? 或者我没有编写自己的文件选择器而错过了其他方法吗?

2 个答案:

答案 0 :(得分:2)

您可以尝试创建自定义文件选择器并传递装入存储点,然后对所有文件类型进行递归迭代:

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 
       }
    }
}

然后使用流程生成器和mount命令调用android中所有安装点的扫描文件,您可以添加对所有希望支持的安装点的检查。

答案 1 :(得分:2)

  

一个人可以使用ACTION_OPEN_DOCUMENT目的打开本机文件选择器

那不是“文件选择器”。并不需要设备上的每个DocumentsProvider都提供恰好是文件的文档。

  

我想选择一个自定义扩展名文件,该文件的MIME类型在android的MimeTypeMap中是未知的,例如.qgs或.dcm文件

不要求设备上的每个DocumentsProvider都使用带有其文件名的文档。您看到的名称是“显示名称”,对于某些提供程序,它们将是文件名,对于其他提供程序,它们可以是该提供程序想要的任何名称。

  

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

否。

  

还是在没有编写自己的文件选择器的情况下错过了其他方法?

如果只需要文件,则有很多existing file picker implementations available in librariesACTION_OPEN_DOCUMENT适用于您要处理所有可能的文档源(可移动存储,云提供程序等),而不仅仅是文件。