Android MediaStore.Audio.Playlists.Members.moveItem不工作

Android MediaStore.Audio.Playlists.Members.moveItem不工作,android,media-player,android-mediaplayer,mediastore,Android,Media Player,Android Mediaplayer,Mediastore,我在一个媒体播放器应用程序上使用Android,当在数据库中创建播放列表,然后尝试修改它时,比如从播放列表中删除歌曲或将歌曲移动到其他位置(该应用程序具有重新排序功能,可以拖放),它根本不起作用。我使用这两个代码来删除和重新排序: public boolean movePlaylistSong(int playlistId, int from, int to){ try{ return MediaStore.Audio.Playlists.Members.moveItem

我在一个媒体播放器应用程序上使用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;
}
它们都返回true,表示已成功,但当再次从数据库(播放列表的外部内容uri)重新加载播放列表时,将返回原始播放列表,且未应用任何更改。它返回成功结果,但实际上不起作用


提前感谢。

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

public static final boolean  moveItem (ContentResolver res, long playlistId, int from, int to) 
我也在论坛上找到了这个答案


我发现它确实会移动播放顺序,但不会移动音频ID。

调用moveItem将更改播放顺序值,但您需要按光标上的播放顺序排序以查看更改。否则,光标将按_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);
要更改播放顺序,我执行了以下操作:

//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();

我认为你的回答很有帮助,关于巫师。但是方法MediaStore.Audio.Playlists.Members.moveItem不起作用,需要改用resolver.update方法。moveItem方法在我测试过的设备上已经起作用了——我在答案中添加了一些代码,说明如何使用moveItem命令。在其中使用播放顺序值很重要。这对我不起作用。所做的是“MediaStore.Audio.Playlists.Members.moveItem(解析程序、播放ID、fromPosition、TopoPosition);”因此,我想您不应该使用moveItem()中的播放顺序值。MediaStore.Audio.Playlists.Members.moveItem也不适用于我!你还在做这个吗?