如何有效地查询包含图像的所有目录的列表?

时间:2014-12-20 21:38:59

标签: android gallery mediastore bucket

我需要查询MediaStore并将所有存储桶名称作为列表获取。很容易做到这一点,并且有很多关于stackoverflow的答案,但是所有的答案都有一个很大的效率问题。他们都查询所有图像以获得图库列表。因此,如果10个目录中有数千个图像,那么查询那些只有10个目录名称需要花费太多时间。我想知道是否有更好的方法来查询这些目录列表而不查询所有图像。

1 个答案:

答案 0 :(得分:0)

久经考验的代码:

public void collectPhotosInFolder(File directory, boolean recurse, List<File> list) {
    Log.i(Constants.LOG_TAG, "Reading photos in file system folder " + directory.getAbsolutePath());

    File[] files = directory.listFiles(new FileFilter() {
        @Override
        public boolean accept(File file) {
            String name = file.getName();
            if (name.contains(".")) {
                String ext = name.substring(name.lastIndexOf('.') + 1);                 
                return ((ext.compareToIgnoreCase("jpg") == 0) || (ext.compareToIgnoreCase("jpeg") == 0) || (ext.compareToIgnoreCase("png") == 0));
            }
            return false;
        }
    });

    if (files == null)
        files = new File[0];

    for (File file : files)
        list.add(file);

    if (recurse) {
        File[] dirs = directory.listFiles(new FileFilter() {
            @Override
            public boolean accept(File file) {
                return file.isDirectory();
            }
        });

        for (File dir : dirs)
            collectPhotosInFolder(dir, recurse, list);
    }
}