2013-08-11 2 views
0

데이터베이스에 재생 목록을 만들 때 재생 목록에서 노래를 제거하거나 노래를 옮기는 것처럼 Media Player 앱에서 Android로 작업하고 있습니다. 다른 위치 (애플 리케이션 reordering 기능을 가지고, 드래그 앤 드롭), 그것은 단순히 작동하지 않습니다. 다시 원래의 하나를 반환 MediaStore.Audio.Playlists.Members.moveItem not working

public boolean movePlaylistSong(int playlistId, int from, int to){ 
    try{ 
     return MediaStore.Audio.Playlists.Members.moveItem(context.getContentResolver(), playlistId, from, to); 
    }catch(Exception e){ 
     Logger.e(TAG, e.getMessage()); 
    } 
    return false; 
} 

public boolean removeFromPlaylist(int playlistId, int audioId) { 
    try{ 
     ContentResolver resolver = context.getContentResolver(); 
     Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId); 
     return resolver.delete(uri, MediaStore.Audio.Playlists.Members.AUDIO_ID +"=?", new String[]{String.valueOf(audioId)}) != 0; 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
    return false; 
} 

그들은 모두가 성공했는지 true를 반환하지만 데이터베이스에서 재생 목록 (재생 목록의 외부 콘텐츠 URI를) 다시로드 할 때 : 나는 제거하고 재정렬을 위해이 두 코드를 사용하고 있습니다 변경 사항 없음. 성공 결과를 반환하지만 실제로 작동하지 않습니다.

미리 감사드립니다.

+0

MediaStore.Audio.Playlists.Members.moveItem도 나를 위해 작동하지 않습니다! 아직도이 일을하고 있습니까? –

답변

0

동일한 문제로 고생하고 있습니다. 성공하지만 변화는없는 것으로 간주됩니다. 그러나 나는 당신의 playlistid가 int 타입이지만 문서가 오래되었다는 것에 주목했다.

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

는 또한 나는 그것이 PLAY_ORDER 아니라 AUDIO_ID를 이동한다는 것을 발견 Alternative to MediaStore.Playlists.Members.moveItem

포럼에이 대답을 발견했다.

1

moveItem을 호출하면 PLAY_ORDER 값이 변경되지만 변경 사항을 보려면 커서에서 PLAY_ORDER로 정렬해야합니다. 그렇지 않으면 커서는 _ID별로 정렬되며 편집되지 않습니다.

Uri uriPlaylistTracks = MediaStore.Audio.Playlists.Members.getContentUri("external", playlistID); 
String sortOrder = MediaStore.Audio.Playlists.Members.PLAY_ORDER; 
cursor = resolver.query(uriPlaylistTracks, STAR, null, null, sortOrder); 

가 PLAY_ORDER을 변경하려면, 내가 그랬어이 :

//get the PLAY_ORDER values for song 
cursor.moveToPosition(fromPosition); 
int from = (int) cursor.getLong(cursor.getColumnIndex(Audio.Playlists.Members.PLAY_ORDER)); 
cursor.moveToPosition(toPosition); //position in list 
int to = (int) cursor.getLong(cursor.getColumnIndex(Audio.Playlists.Members.PLAY_ORDER)); 
//update the PLAY_ORDER values using moveItem 
boolean result = MediaStore.Audio.Playlists.Members.moveItem(resolver, 
       playlistID, from, to); 
//get new cursor with the updated PLAY_ORDERs 
cursor = resolver.query(uriPlaylistTracks, STAR, null, null, sortOrder); 
//change the cursor for a listview adapter 
adapter.changeCursor(cursor); 
adapter.notifyDataSetChanged(); 
+0

당신의 대답은 sortOrder에 대해 도움이된다고 생각합니다. 그러나 MediaStore.Audio.Playlists.Members.moveItem 메서드가 작동하지 않습니다. 대신 resolver.update 메서드를 사용해야합니다. –

+0

moveItem 메서드는 지금까지 테스트 한 장치에서 작동했습니다. moveItem 명령을 사용하는 방법에 대한 답변에 몇 가지 코드를 추가했습니다. PLAY_ORDER 값을 사용하는 것이 중요합니다. – jtav

+0

이것은 나를 위해 작동하지 않았다. MediaStore.Audio.Playlists.Members.moveItem (resolver, playlistID, fromPosition, toPosition)은 무엇입니까? ' 그래서 당신은 moveItem()에서 Play_Order 값을 사용하면 안된다. – Anjani