2014-12-20 8 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); 
    } 
}