Проблема в том, что вы создаете MediaPlayer
с использованием метода MediaPlayer.create()
, и невозможно изменить AudioAttributes
позже, если вы сделаете это таким образом.
С документация :
Удобный метод для создания MediaPlayer для данного идентификатора ресурса. О
success, prepare () уже вызван и не должен быть
позвонил снова.
Когда закончите с MediaPlayer, вы должны вызвать release (), чтобы освободить
Ресурсы. Если не выпущено, слишком много экземпляров MediaPlayer приведет к
в исключении.
Обратите внимание, что, поскольку prepare () вызывается автоматически в этом методе, вы
не может изменить идентификатор аудио сеанса (см. setAudioSessionId (int)) или
аудио атрибуты (см.
setAudioAttributes (android.media.AudioAttributes) нового
MediaPlayer.
Вместо использования create()
просто создайте экземпляр MediaPlayer
, используя конструктор по умолчанию new MediaPlayer();
. Затем установите источник с помощью метода setDataSource()
и установите остальные атрибуты AudioAttributes, как вы делали раньше.
Я не знаю о Kotlin, но на Java это выглядело бы примерно так:
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioAttributes(AudioAttributes.Builder()
.setFlags(AudioAttributes.FLAG_AUDIBILITY_ENFORCED)
.setLegacyStreamType(AudioManager.STREAM_ALARM)
.setUsage(AudioAttributes.USAGE_ALARM)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build());
mediaPlayer.setDataSource(context, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM));
mediaPlayer.setLooping(true);
mediaPlayer.prepare();
mediaPlayer.start();