2011-10-05 2 views
0

Google의 앱에서는 특정 폴더 하나의 음악 파일을 가져오고 싶습니다. 미디어 저장소를 사용하려면이 작업을 수행해야합니다.하나의 디렉토리에있는 음악 파일을 가져 오기

우리는이 디렉토리의/mnt/sd/music 경로를 가지고 있으므로 하위 디렉토리가 아닌 모든 파일이 필요합니다.

우리는 부분 문자열을 사용하여 쿼리를 시도했지만 작동하지 않습니다.

public ArrayList<Song> getAudioFilesOfDir(String pathDirectory) 
    { 
     ArrayList<Song> songs = new ArrayList<Song>(); 

     //Some audio may be explicitly marked as not being music 
     String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0 AND " + android.provider.MediaStore.Audio.Media.DATA.substring(pathDirectory.length()).contains("/") ; 

     String[] projection = { 
       MediaStore.Audio.Media._ID, 
       MediaStore.Audio.Media.DATA, 
       MediaStore.Audio.Media.TRACK, 
       MediaStore.Audio.Media.YEAR, 
       MediaStore.Audio.Media.DURATION, 
       MediaStore.Audio.Media.ALBUM_ID, 
       MediaStore.Audio.Media.ALBUM, 
       MediaStore.Audio.Media.ALBUM_KEY, 
       MediaStore.Audio.Media.TITLE, 
       MediaStore.Audio.Media.TITLE_KEY, 
       MediaStore.Audio.Media.ARTIST_ID, 
       MediaStore.Audio.Media.ARTIST 
     }; 

     ContentResolver cr = CoreLib.Context().getContentResolver(); 

     Cursor cursor = cr.query(
       MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
       projection, 
       selection, 
       null, 
       MediaStore.Audio.Media._ID); 

     int _ID_Column = cursor.getColumnIndex(MediaStore.Audio.Media._ID); 
     int DATA_Column = cursor.getColumnIndex(MediaStore.Audio.Media.DATA); 
     int TRACK_Column = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE); 
     int YEAR_Column = cursor.getColumnIndex(MediaStore.Audio.Media.YEAR); 
     int DURATION_Column = cursor.getColumnIndex(MediaStore.Audio.Media.DURATION); 
     int ALBUM_ID_Column = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID); 
     int ALBUM_Column = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM); 
     //int ALBUM_KEY_Column = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_KEY); 
     //int TITLE_Column = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE); 
     //int TITLE_KEY_Column = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE_KEY); 
     //int ARTIST_ID_Column = cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST_ID); 
     int ARTIST_Column = cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST); 

     while(cursor.moveToNext()) 
     { 
      Song song = new Song(); 
      song.setTrackId(cursor.getInt(_ID_Column)); 
      song.setPathAudioFile(cursor.getString(DATA_Column)); 
      song.setTrackName(cursor.getString(TRACK_Column)); 
      song.setYearTrack(cursor.getInt(YEAR_Column)); 
      song.setDuration(cursor.getString(DURATION_Column)); 
      song.setAlbumId(cursor.getInt(ALBUM_ID_Column)); 
      song.setAlbumName(cursor.getString(ALBUM_Column)); 
      song.setArtist(cursor.getString(ARTIST_Column)); 

      songs.add(song); 
     } 

     return songs; 
    } 

답변

0

나는이 작동하지 않습니다 말할 수 있습니다

android.provider.MediaStore.Audio.Media.DATA.substring(pathDirectory.length()).contains("/") 

MediaStore.Audio.Media.DATA

은 데이터베이스 컬럼에 대한 상수를 포함하고 그에서 작동하는 것은 단지 잘못된 것입니다.

해결 방법은 these answers입니다.

0

동일한 문제가 발생했습니다. 삭제할 경우 -

MediaStore.Audio.Media.IS_MUSIC + " != 0 

그런 다음 작동합니다.

+0

그러면 작동합니다. 하지만 그 이유는 모르겠지만 ... – robot3

관련 문제