안드로이드 개발 질문/답변
(글 수 45,052)
String[] AudioK = {
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.SIZE
};
musiccursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, AudioK, null,null, null);
외부 adcard의 오디오 정보를 가져와 리스트로 뿌리는것을 시도 중입니다.
전체 오디오의 목록은 가져오지만, 잘안되는것이 있어 질문을 드립니다.
위의 소스처럼 오디오의 목록을 다 가져오는것이 아닌
/mnt/sdcard/Audiolist/ 에 있는 오디오만 그러니깐 폴더별로 오디오 정보를 나누어 가져오고 싶습니다.
managedQuery의 null,null, null) 부분을 고치는것같기도 하고
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI 이경로 자체를 수정하는것같기도 하고....
검색을 해보면 구글에 외국의 블러그에 뭐라 써져있는데 솔직히 잘 모르겠어서요...
혹시 방법을 아시면 가르쳐 주시면 너무 감사하겠습니다.
1. 오디오 파일이 있는 폴더 목록 알아오기
MediaStore.Audio.Media.DATA 에는 각 파일별 절대 경로가 있고
MediaStore.Audio.Media.DISPLAY_NAME 에는 파일 이름이 있습니다.
오디오 파일이 있는 폴더는 절대 경로에서 파일 이름을 뺀 것이므로, 아래와 같이 구할 수 있습니다.
참고로 ContentResolver.query 나 managedQuery에는 group by가 없으므로 distinct로 중복을 제거 합니다.
ArrayList<String> folderList = new ArrayList<String>();
ContentResolver resolver = getContentResolver();
String[] folderColumn = {
"distinct replace("+MediaStore.Audio.Media.DATA+", "+ MediaStore.Audio.Media.DISPLAY_NAME+", '')"
};
Cursor folderListCursor = resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, folderColumn, null, null, null);
if(folderListCursor != null && folderListCursor.getCount() > 0) {
folderListCursor.moveToFirst();
while(!folderListCursor.isAfterLast()) {
folderList.add(folderListCursor.getString(0));
folderListCursor.moveToNext();
}
}
Log.d(TAG, "folderList : "+folderList);
2. 폴더 별 오디오 목록 가져오기.
1번에서 알아온 폴더 경로를 가지고 해당 경로로 시작하는 오디오파일만 검색한다.
String where = MediaStore.Audio.Media.DATA + " like ?";
String whereArgs[] = {folderList.get(index)+"%"};
Cursor audioListCursor = resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, where, whereArgs, null);