Мое приложение создает списки воспроизведения в медиа-магазине Android. Все хорошо для API, включая 28, однако API 29, похоже, требует дополнительных разрешений. Вставка нового имени и идентификатора плейлиста работает без проблем. Когда дело доходит до вставки идентификатора дорожки и порядка воспроизведения, возникает исключение разрешения на доступ. При проверке Uri я обнаружил, что когда resolver.insert для 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 г.: небольшой шаг вперед, я почти уверен, что мне нужно получить Documenturi для исходного uri, но все равно выдает ошибку доступа. Таким образом, проблема заключается не в доступе к дорожкам, а в самом 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