具有特定文件扩展名的Android文件选择器

Nan*_*ore 6 android android-intent android-fileprovider

当我运行默认文件选择器时,我需要在我的应用程序中仅显示"pdf"文件我无法过滤文件扩展名.

    final Intent getContentIntent = new Intent(Intent.ACTION_GET_CONTENT);
    getContentIntent.setType("application/pdf");
    getContentIntent.addCategory(Intent.CATEGORY_OPENABLE);

    Intent intent = Intent.createChooser(getContentIntent, "Select a file");
    startActivityForResult(intent, REQUEST_PDF_GET);
Run Code Online (Sandbox Code Playgroud)

文件选择器显示任何类型的文件.我想只显示pdf文件.如何过滤文件选择器显示的文件.

JAS*_*SON 7

您不了解您的意图可能触发的用户安装的文件浏览器应用程序.我认为这是一个更好的手卷东西的情况.我的方法是

a)在外部媒体上查找具有特定扩展名的所有文件(我正在寻找.saf扩展名,因此您将相应地更改.pdf):

    public ArrayList<String> findSAFs(File dir, ArrayList<String> matchingSAFFileNames) {
    String safPattern = ".saf";

    File listFile[] = dir.listFiles();

    if (listFile != null) {
        for (int i = 0; i < listFile.length; i++) {

            if (listFile[i].isDirectory()) {
                findSAFs(listFile[i], matchingSAFFileNames);
            } else {
              if (listFile[i].getName().endsWith(safPattern)){
                  matchingSAFFileNames.add(dir.toString() + File.separator + listFile[i].getName());
                  //System.out.println("Found one! " + dir.toString() + listFile[i].getName());
              }
            }
        }
    }    
    //System.out.println("Outgoing size: " + matchingSAFFileNames.size());  
    return matchingSAFFileNames;
}
Run Code Online (Sandbox Code Playgroud)

b)将结果输入a ListView并让用户触摸他/她想要的文件.您可以根据需要将列表设置为精美 - 显示缩略图,加上文件名等.

这听起来好像需要很长时间,但它没有,然后你就知道了每个设备的行为.

  • 谢谢Jason,我会把这个标记为正确的答案,但我很失望Android如何不提供内置功能这样的基本工作.我只想要文件扩展名... (2认同)