You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

音频播放器播放列表添加单首歌曲重复插入问题求助

解决播放列表添加歌曲重复的问题

嘿,我一眼就揪出问题啦——你的代码里不小心执行了两次插入歌曲的操作,这就是为啥每次添加单首歌都会出现两份副本!

问题根源

看看你这段代码里的关键部分:

public static void AddSongToPlaylist(long songID, long pID, Context context ){
 Uri pUri = MediaStore.Audio.Playlists.Members.getContentUri("external", pID);
 ContentResolver resolver = context.getContentResolver();
 ContentValues values = new ContentValues();
 String[] cols = new String[] { "count(*)" };
 Cursor cur = resolver.query(pUri, cols, null, null, null);
 cur.moveToFirst();
 final int base = cur.getInt(0)+1;
 cur.close();
 values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER,base);
 values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, songID);
 resolver.insert(pUri,values); // 第一次插入歌曲
 resolver.notifyChange(Uri.parse("content://media"), null);
 Log.i("URI:",resolver.insert(pUri, values)+""); // 第二次插入!这里是重复的根源
 Toast.makeText(context, "Song Added", Toast.LENGTH_SHORT).show();
 Log.i("Song ID:", String.valueOf(songID));
}

你在第12行已经调用resolver.insert(pUri,values)完成了歌曲插入,结果在第14行的日志代码里又重复调用了一次resolver.insert(pUri, values)——两次独立的插入操作,自然会把同一首歌两次加到播放列表里。

修正后的代码

只需要保留一次插入操作,把插入结果存到变量里,再用这个变量打日志就搞定了:

public static void AddSongToPlaylist(long songID, long pID, Context context ){
 Uri pUri = MediaStore.Audio.Playlists.Members.getContentUri("external", pID);
 ContentResolver resolver = context.getContentResolver();
 ContentValues values = new ContentValues();
 String[] cols = new String[] { "count(*)" };
 Cursor cur = resolver.query(pUri, cols, null, null, null);
 cur.moveToFirst();
 final int base = cur.getInt(0)+1;
 cur.close();
 values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER,base);
 values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, songID);
 // 只执行一次插入,把结果存到变量
 Uri insertedUri = resolver.insert(pUri,values);
 resolver.notifyChange(Uri.parse("content://media"), null);
 Log.i("URI:", insertedUri + ""); // 用之前的插入结果打日志
 Toast.makeText(context, "Song Added", Toast.LENGTH_SHORT).show();
 Log.i("Song ID:", String.valueOf(songID));
}

这样修改后,每次添加歌曲只会执行一次插入操作,播放列表里就不会再出现重复的歌曲条目啦。

内容的提问来源于stack exchange,提问作者Rektirino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:53:54