java - 在 Android Q (API29) 及更高版本中将歌曲添加到播放列表会引发 SecurityException

标签 java android

因为 Android Q (API29) 中的 Android 隐私更改 无法将歌曲添加到播放列表,并且在添加轨道时会引发此错误消息。

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

我知道我们可以将其视为 RecoverableSecurityException并分别授予每个文件的权限。

但这真的很麻烦,我想知道是否还有其他方法。

我已经找到了 post来自用户@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);
}

编辑

貌似扔了异常(exception) 不是 RecoverableSecurityException 的实例那么我们如何访问这些内容呢?

最佳答案

您可以使用 playListUri.getpath()并解决它。

关于java - 在 Android Q (API29) 及更高版本中将歌曲添加到播放列表会引发 SecurityException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62076876/

相关文章:

java - 如何使模块 x 的第 3 方依赖项与其一起到达依赖于模块 x 的模块 y 的类路径?

android - 如何使用 Jetpack Compose 将焦点状态设置为按钮?

android - Sphinx4 语音识别 trasncribe 演示不能准确地用于短 wav 文件

java - 修复 Android studio 中的错误

java - 使用 java 从 sybase db 读取数据时 Linux 上的特殊字符问题

java - 可以将 Maven clean 阶段添加到默认生命周期吗?

java - 在没有任何 C/C++ 或 make 知识的情况下使用 FFmpeg for android

java - 支持Renjin中的R预测

java - 无法选择多个 gridview 项目

android - 以编程方式将项目添加到相对布局