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