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();
}
非常感谢任何帮助。
相对路径:DCIM/MyFolder
或Pictures/MyFiles
。
[DATA至full path of file
。 –