7

デフォルトのファイル チューザーを実行するときに、アプリケーションで「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ファイルのみを表示したい。File Chooser で表示されるファイルをフィルタリングするにはどうすればよいですか。

4

2 に答える 2

8

ユーザーがインストールしたファイル ブラウザー アプリが、あなたのインテントによってトリガーされる可能性があるかどうかは、あなたにはわかりません。これは手巻きの方がいいケースだと思います。私のアプローチは

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) その結果を a に取得しListView、ユーザーが必要なファイルにアクセスできるようにします。サムネイルやファイル名などを表示するなど、好きなだけリストを凝ったものにすることができます。

長い時間がかかるように思えますが、そうではなく、すべてのデバイスの動作がわかりました。

于 2014-12-10T18:01:43.127 に答える