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

标签 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);

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

最佳答案

您不知道您的 Intent 可能会触发哪些用户安装的文件浏览器应用程序。我认为在这种情况下最好用手卷一些东西。我的方法是

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

b) 将该结果放入 ListView 并让用户触摸他/她想要的文件。您可以根据需要使列表更花哨——显示缩略图、加上文件名等。

听起来好像需要很长时间,但实际上并没有,然后您就知道每台设备的行为了。

关于具有特定文件扩展名的 Android 文件选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27407157/

相关文章:

android - 应用程序退出而不是进入下一个 Activity

android - 如何在 Android Oreo (8.1) 或更高版本中从 URI 获取文件路径

java - Android SQLite : Using onUpgrade to update data?

android - Google App Invite - 主题更改

java - 如何在每个字符串索引内连接字符串或单词

android - 检查 Gcm Intent Service 上的 Activity 是否存在

android - 通过intent/Fileprovider共享文档

java - 如何在Android 8.0中查看默认图库的图像?

android - 使用 Intent 将数据从一个 Activity 传输到另一个 Activity

java - 将图像跨度设置在文本的下一行和中心