본문 바로가기

PROGRAMING/Android

PlayList특정 재생 항목의 Music들의 재생순서 변경하기 moveItem 사용

PlayList특정 재생 항목의 Music들의 재생순서 변경하기 moveItem 사용

http://developer.android.com/reference/android/provider/MediaStore.Audio.Playlists.Members.html#moveItem(android.content.ContentResolver, long, int, int)

public static final boolean moveItem (ContentResolver res, long playlistId, int from, int to)

Added in API level 8

Convenience method to move a playlist item to a new location

Parameters
resThe content resolver to use
playlistIdThe numeric id of the playlist
fromThe position of the item to move
toThe position to move the item to
Returns
  • true on success


시나리오

1. PlayList에서 재생목록 하나를 선택 하면 Activity가 하나 열리고 그안에는 선택된 재생목록에 포함된 Music들이 ListView에 보여진다.

2. ListView에 표시되는 음악들은 android.provider.MediaStore.Audio.Playlists.Members.PLAY_ORDER +" ASC" 

PLAY_ORDER 컬럼에 대해 오름차순 정렬되어있다. [(위 행)1,2,3,4,5(아래 행)]

2. ListView에 표시되는 음악들은 위, 아래표시가 되어있는 button을 두개 같는다.

3. 위 버튼을 누르면 해당 항목의 PLAY_ORDER 값은 바로 위 항목과 변경된다.

4. 아래 버튼을 누르면 해당 항목의 PLAY_ORDER 값은 바로 아래 항목과 변경된다.


구현

1) ListView에 사용할 CursorLoader  PLAY_ORDER컬럼으로 오름차순 정렬했다.

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



2) 위, 아래 버튼 ListView 구현

/*bindView*/

long PlayOrder = cursor.getLong(cursor.getColumnIndex(android.provider.MediaStore.Audio.Playlists.Members.PLAY_ORDER));

holder.btnUp.setTag(PlayOrder);

holder.btnDn.setTag(PlayOrder); 

3) 위, 아래 버튼 클릭 액션 구현

@Override

public void onClick(View v) {

LOG.i(CLASSNAME, "onClick v.getId() : " +v.getId());

if(v.getId()==R.id.btnUp){

LOG.i(CLASSNAME, "onClick btnUp");

long position= (long)(Long)v.getTag();

int to = (int) (position-1);

int from = (int) position;

LOG.i(CLASSNAME, "onClick btnUp mPlaylistId : "+mPlaylistId+", position : " +position+" , from : "+from+" , to : "+to);

boolean result = MediaStore.Audio.Playlists.Members.moveItem(getContentResolver(), mPlaylistId, from, to);

LOG.i(CLASSNAME, "onClick btnUp result : " +result);

} else if(v.getId()==R.id.btnDn){

LOG.i(CLASSNAME, "onClick btnDn");

long position= (long)(Long)v.getTag();

int to = (int) (position+1);

int from = (int) position;

LOG.i(CLASSNAME, "onClick btnDn mPlaylistId : "+mPlaylistId+", position : " +position+" , from : "+from+" , to : "+to);

boolean result = MediaStore.Audio.Playlists.Members.moveItem(getContentResolver(), mPlaylistId, from, to);

LOG.i(CLASSNAME, "onClick btnDn result : " +result);

}

}


mPlaylistId는 재생목록에 대한 _id이다.

* 특정 재생목록에 대한 id에 대해서 from,to에 해당하는 PLAY_ORDER의 컬럼 값을 교체하여 재생 순서를 변경하게된다.