【问题标题】:How to query list of all directories with images in it, efficiently?如何有效地查询所有包含图像的目录列表?
【发布时间】:2014-12-20 21:38:58
【问题描述】:
我需要查询 MediaStore 并以列表的形式获取所有存储桶名称。这很容易做到,并且在 stackoverflow 上有很多问题的答案,但是所有的答案都存在一个很大的效率问题。他们都查询所有图像以获取图库列表。因此,如果 10 个目录中有数千张图像,那么查询这 10 个目录名称会花费太多时间。我想知道是否有更好的方法来查询这些目录列表而不查询所有图像。
【问题讨论】:
标签:
android
gallery
mediastore
bucket
【解决方案1】:
经过实战测试的代码:
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);
}
}