Contentresolver.delete() 不工作 android

问题描述 投票:0回答:2

在我的 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();
android android-mediaplayer android-contentresolver
2个回答
2
投票

试试这个:

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) {
    }
}

0
投票

对于从 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();
                    }
                }
        );
© www.soinside.com 2019 - 2024. All rights reserved.