본문 바로가기

PROGRAMING/Android

Playlists.Members.getContentUri와 PlayList안의 음악들 조회

android.provider.MediaStore.Audio.Playlists.Members.getContentUri("external",mPlaylistId);


위 구문을 사용하면 mPlaylistId [playlist_id]에 해당 하는 재생목록의 음악들을 검색할수 있는 Uri가 만들어진다.

"external" 문자열은 무슨 내용인지 잘모른다. 하지만 "external"로 넣어서 올바른 값을 리턴받았다는 사실에 주목하자.


Uri audioExternalPlayListUri android.provider.MediaStore.Audio.Playlists.Members.getContentUri("external",mPlaylistId);


CursorLoader tmp = new CursorLoader(this, // Context

audioExternalPlayListUri, // Table to query

mProjection, // Projection to return

null, // No selection clause

null, // No selection arguments

android.provider.MediaStore.Audio.Playlists.Members.PLAY_ORDER +" ASC" // Default sort order

위 uri로 검색하면 실제로는 Media Provider의 audio_playlists_map, audio 두 테이블이 inner 조인을 한다

일부러  mProjection에 잘못된 컬럼값을 입력하여 sql 에러 문을 확인해보았다.

03-14 14:39:16.509 E 3921 3953 AndroidRuntime:  

Caused by: android.database.sqlite.SQLiteException: no such column: members (code 1, while compiling: 

 SELECT audio_playlists_map._id AS _id, audio_id, members, play_order, play_order, playlist_id 

 FROM audio_playlists_map, audio 

 WHERE (audio._id = audio_id AND playlist_id=?)


결국엔 위에서 넣은 Uri를 사용하면 audio_playlists_map테이블과 audio에 있는 컬럼들을 모두 조회할수있다.

private String[] mProjection = new String[] {

/*audio_playlists_map*/

android.provider.MediaStore.Audio.Playlists.Members._ID,

android.provider.MediaStore.Audio.Playlists.Members.AUDIO_ID,

//android.provider.MediaStore.Audio.Playlists.Members.CONTENT_DIRECTORY,  이것 없음

//android.provider.MediaStore.Audio.Playlists.Members.DEFAULT_SORT_ORDER, play_order와 같음

android.provider.MediaStore.Audio.Playlists.Members.PLAY_ORDER,

android.provider.MediaStore.Audio.Playlists.Members.PLAYLIST_ID,

/*audio*/

android.provider.MediaStore.Audio.Media.TITLE,

android.provider.MediaStore.Audio.Media.ARTIST,

android.provider.MediaStore.Audio.Media.DURATION,

android.provider.MediaStore.Audio.Media.ALBUM_ID,

android.provider.MediaStore.Audio.Media.DATA,

};


PlayList 항목에 들어있는 MusicList를 쉽게 구할 수 있다.