0

我在媒体播放器应用程序上使用 Android,在数据库中创建播放列表然后尝试修改它,例如从播放列表中删除歌曲或将歌曲移动到其他位置(该应用程序具有重新排序功能,拖放) ,它根本行不通。我正在使用这两个代码来删除和重新排序:

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;
}

他们都返回成功,但是当再次从数据库(播放列表的外部内容 uri)重新加载播放列表时,它返回原始的,没有应用任何更改。它返回成功结果,但实际上没有用。

提前致谢。

4

2 回答 2

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();
于 2013-11-15T09:05:11.607 回答
0

为同样的问题而苦苦挣扎。表现得一样成功,但没有变化。但是,我确实注意到您的 playlistid 是 int 类型,但文档说明很长。

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

我还在MediaStore.Playlists.Members.moveItem 的替代论坛上找到了这个答案

我发现它确实移动了 PLAY_ORDER 而不是 AUDIO_ID。

于 2013-09-29T10:58:47.867 回答