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

Lev*_*vey 14 java android filepicker android-intent mime-types

在Android中,可以使用ACTION_OPEN_DOCUMENTIntent 打开本机文件选择器并选择例如.mp4文件.这是通过将mime类型设置为video/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);
    }
Run Code Online (Sandbox Code Playgroud)

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

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

  1. ACTION_OPEN_DOCUMENTIntent中按扩展名过滤
  2. 向android注册一个新的mime类型,以便它可以与ACTION_OPEN_DOCUMENTIntent 一起使用

这些选择是否可行以及如何? 或者我没有编写自己的文件选择器而错过了其他方法吗?

shu*_*rg1 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 
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

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