2014-12-20 72 views
0

我需要查詢MediaStore並獲取所有存儲桶名稱作爲列表。這很容易做到,並且在stackoverflow上有大量問題和答案,但是所有的答案都有一個很大的效率問題。他們都會查詢所有圖像以獲取圖庫列表。因此,如果在10個目錄中有數千個圖像,則只需要很多時間來查詢這10個目錄名稱。我想知道是否有更好的方法來查詢這些目錄列表而不查詢所有的圖像。如何有效地查詢包含圖像的所有目錄列表?

回答

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