Android 10/Q,MediaStore 和 MediaPlayer.playFromUri

Android 10/Q, the MediaStore and MediaPlayer.playFromUri

Android 10 中与 MediaStore 相关的更改现在似乎需要为 >=10 和 <=9 版本使用不同的代码。做了一年其他事情后,我回来更新应用程序并遇到困难。我的特殊问题是我下载了一个音乐文件(所有类型),将其连同专辑封面一起存储到内部共享存储目录 (Android/media/com.myapp/mydir)。然后我使用 ContentResolver 将它添加到 MediaStore 并取回 Uri。然后我会使用 MediaPlayer.playFromUri() 播放它。

这在 Android <=9 上仍然可以正常工作,但在 10 MediaPlayer.playFromUri() 上会抛出 IO 异常。文件在那里,Uri 在添加到 MediaStore 时返回。我在这里阅读了一些试图拼凑解决方案的帖子,但还是不太明白。

添加到 MediaStore 的提炼代码是...

        ContentResolver cr = getContext().getContentResolver();
        ContentValues vtrack = new ContentValues();

        vtrack.put(MediaStore.MediaColumns.TITLE, t.getTitle());
        vtrack.put(MediaStore.MediaColumns.DATA, audiopath);
        vtrack.put(MediaStore.Audio.AudioColumns.ARTIST, t.getArtist());
        vtrack.put(MediaStore.Audio.AudioColumns.ALBUM, t.getAlbum());
        vtrack.put(MediaStore.Audio.AudioColumns.IS_MUSIC, 1);

        Uri u;
        try {
            u = cr.insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, vtrack);
        }
        catch (Exception e) {
            e.getMessage();
        }

非常感谢任何帮助。

Relative_path: DCIM/MyFolderPictures/MyFiles.

数据到 full path of file。 –