我的应用在 android mediastore 中创建播放列表。包括 28 在内的 api 一切都很好,但是 api 29 似乎需要额外的权限。插入新的播放列表名称和 ID 可以正常工作。插入track id和播放顺序时,会抛出访问权限异常。在验证 Uri 时,我发现当 resolver.insert for API 29 出现异常错误时:
java.lang.SecurityException: myapp_name has no access to content://media/external_primary/audio/media/146
编码:
Uri exturi = MediaStore.Audio.Playlists.Members.getContentUri("external", playlist_id);
// exturi : content://media/external/audio/playlists/227/members
// values : audio_id=146 play_order=0
values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, play_order);
values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, audio_id);
try {
resolver.insert(exturi, values);
} catch (Exception e) {
e.printStackTrace();
}
奇怪的是,虽然将新的播放列表插入 Mediastore 有效,但添加曲目(track_id,播放顺序)会导致访问权限错误
如何解决 API 29 的这个异常错误?
2021 年 2 月更新:向前迈出了一小步,我很确定我需要为原始 uri 获取 Documenturi,但仍然给我访问错误。所以问题不在于访问轨道,而在于 uri 本身。
doc_uri = MediaStore.getDocumentUri(context,playlist_members_uri);
java.lang.SecurityException: com.flyingdutchman.newplaylistmanager has no access to content://media/external/audio/playlists/130/members