【发布时间】:2019-12-15 07:49:11
【问题描述】:
我的应用在 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
【问题讨论】:
-
不要只使用外部硬编码,使用外部主卷。
-
developer.android.com/training/data-storage/shared/media 尝试使用 MediaStore.VOLUME_EXTERNAL_PRIMARY(在 API
-
@Khoa Nguyễn 试过这个没有用
-
我也有同样的问题。我可以从播放列表中删除曲目,但是在添加时,我在 API 29 上遇到了同样的异常。您找到解决方案了吗?我很乐意为此提供帮助。
-
@EvanBlack 嗨。目前,我使用基于文件的 m3u 播放列表进行了解决。系统扫描这些并创建播放列表。市长的缺点是每次重新创建播放列表时 id 都会发生变化。因此,某些使用播放列表的应用程序每次更改时都需要更新。
标签: android mediastore android-10.0