Из-за Android изменений конфиденциальности в Android Q (API29) невозможно добавить песни в список воспроизведения, и при добавлении трека выдается это сообщение об ошибке.
java.lang.SecurityException: com.mp3player.mp3player has no access to content://media/external_primary/audio/media/117
Я знаю, что мы можем поймать это как RecoverableSecurityException
и предоставить разрешение для каждого файла индивидуально.
Но это действительно проблема, и мне интересно, есть ли другой способ.
Я уже нашел сообщение от пользователя @Theo с той же проблемой, но без ответов.
Код для добавления песен в плейлист
public void addToPlayList(Context c, long songID, long playListID, String playlistName) {
Uri playListUri = MediaStore.Audio.Playlists.Members.getContentUri("external", playListID);
String[] columns = {
MediaStore.Audio.Playlists.Members.AUDIO_ID,
MediaStore.Audio.Playlists.Members.PLAY_ORDER,
};
ContentResolver resolver = c.getContentResolver();
Cursor cursor = resolver.query(playListUri, columns, null, null, null);
int playOrder = 0;
if (cursor != null) {
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
playOrder = cursor.getInt(0) + 1;
}
cursor.close();
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, songID);
contentValues.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, playOrder);
resolver.insert(playListUri, contentValues);
resolver.notifyChange(Uri.parse("content://media"), null);
}
EDIT
Похоже, что выброшенное Exception не является экземпляром RecoverableSecurityException
, так как же нам получить доступ к этому контенту?