在我的 Android 应用程序中,当用户长按特定歌曲时,我想从播放列表中删除歌曲。为此,我使用了
Contentresolver.delete()
方法,但它不起作用。它既不抛出错误也不删除数据?我在这里发布我的代码。请告诉我为什么它不起作用。
代码:
ContentResolver resolver = DefaultSongList.this.getContentResolver();
Uri mUri = MediaStore.Audio.Playlists.Members.getContentUri("external",playListId);
String audioId = songsList.get(pos).get("id");
resolver.delete(mUri,MediaStore.Audio.Playlists.Members.AUDIO_ID +" = "+ audioId , null);
Toast.makeText(DefaultSongList.this, "Song removed from Playlist.", Toast.LENGTH_SHORT).show();
试试这个:
public void removePlaylistMember(Context context, long memberid,
long mplaylistid) {
try {
Uri uri = MediaStore.Audio.Playlists.Members.getContentUri(
"external", mplaylistid);
String selection = MediaStore.Audio.Playlists.Members.AUDIO_ID
+ "=?";
String selectionargs[] = { String.valueOf(memberid) };
context.getContentResolver().delete(uri, selection, selectionargs);
} catch (Exception e) {
}
}
对于从 Android 12 开始使用的用户,
MediaStore.Audio.Playlists
已被弃用,因此您无法从播放列表中删除曲目。来自 Android 文档:
此类在 API 级别 31 中已弃用。 Android 播放列表现已弃用。出于兼容性原因,我们将保留当前功能,但我们将不再接受功能请求。我们不建议添加 Android 播放列表的新用法。 M3U 文件可以用作替代方案。
您应该改用文件访问并删除您想要的曲目。
P/s:直接从文件中删除不会导致媒体存储自行更新。您应该使用
MediaScannerConnection
要求其更新。这是片段:
MediaScannerConnection.scanFile(
getContext(),
new String[]{ playlistPath },
null,
new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String path, Uri uri) {
Toast.makeText(getContext(), R.string.remove_from_playlist, Toast.LENGTH_SHORT).show();
}
}
);