Adding songs to a playlist in Android Q (API29) and above throws a SecurityException

huangapple 未分类评论49阅读模式
英文:

Adding songs to a playlist in Android Q (API29) and above throws a SecurityException

问题

由于Android Q(API 29)中的Android隐私更改,无法将歌曲添加到播放列表,当添加曲目时会抛出以下错误消息。

java.lang.SecurityException: com.mp3player.mp3player无法访问content://media/external_primary/audio/media/117

我知道我们可以将其捕获为RecoverableSecurityException,并为每个文件单独授予许可。

但是这确实很麻烦,我想知道是否有另一种方法。

我已经找到了用户@Theo的一个帖子,完全相同的问题,但没有任何答案。

用于将歌曲添加到播放列表的代码

public void addToPlayList(Context c, long songID, long playListID, String playlistName) {

    Uri playListUri = MediaStore.Audio.Playlists.Members.getContentUri("external", playListID);

    String[] columns = {
            MediaStore.Audio.Playlists.Members.AUDIO_ID,
            MediaStore.Audio.Playlists.Members.PLAY_ORDER,
    };

    ContentResolver resolver = c.getContentResolver();

    Cursor cursor = resolver.query(playListUri, columns, null, null, null);

    int playOrder = 0;
    if (cursor != null) {
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            playOrder = cursor.getInt(0) + 1;
        }
        cursor.close();

        ContentValues contentValues = new ContentValues();

        contentValues.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, songID);
        contentValues.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, playOrder);

        resolver.insert(playListUri, contentValues);
        resolver.notifyChange(Uri.parse("content://media"), null);
}

编辑

看起来抛出的异常不是RecoverableSecurityException的实例,那么我们如何访问该内容?

英文:

Because of the Android Privacy Changes in Android Q (API29) it's not possible to add songs to a Playlist and it throws this error message when adding a track.

java.lang.SecurityException: com.mp3player.mp3player has no access to content://media/external_primary/audio/media/117

I know that we can this catch this as a RecoverableSecurityException and grant permission for each file individually.

But this is really a hassle and i'm wondering if there is another way.

I already found a post from User @Theo with the same exact problem but without any answers.

Code for adding songs to a playlist

public void addToPlayList(Context c, long songID, long playListID, String playlistName) {

    Uri playListUri = MediaStore.Audio.Playlists.Members.getContentUri("external", playListID);

    String[] columns = {
            MediaStore.Audio.Playlists.Members.AUDIO_ID,
            MediaStore.Audio.Playlists.Members.PLAY_ORDER,
    };

    ContentResolver resolver = c.getContentResolver();

    Cursor cursor = resolver.query(playListUri, columns, null, null, null);

    int playOrder = 0;
    if (cursor != null) {
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            playOrder = cursor.getInt(0) + 1;
        }
        cursor.close();

        ContentValues contentValues = new ContentValues();

        contentValues.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, songID);
        contentValues.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, playOrder);

        resolver.insert(playListUri, contentValues);
        resolver.notifyChange(Uri.parse("content://media"), null);
}

EDIT

Looks like the thrown Exception is not an instance of RecoverableSecurityException so how do we get access to that content?

答案1

得分: -1

你可以使用playListUri.getpath()来解决这个问题。

英文:

you can use playListUri.getpath() and solve it.

huangapple
  • 本文由 发表于 2020年5月29日 08:47:45
  • 转载请务必保留本文链接:https://java.coder-hub.com/62076876.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定