Как правильно установить тип аудиопотока MediaPlayer

Я пытаюсь создать способ настройки параметров громкости для каждого из разных потоков (носителей, уведомлений, мелодий звонка и т. Д.) И иметь возможность предварительного просмотра уровня выходного звука каждого потока. Я считаю, что у меня правильная реализация, но когда я устанавливаю тип выходного потока, звук не воспроизводится.

Вот код, который правильно воспроизводит выбранный пользователем звуковой сигнал:

Uri mediaUri=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); MediaPlayer mp=MediaPlayer.create(getApplicationContext(), mediaUri); //mp.setAudioStreamType(AudioManager.STREAM_ALARM); mp.start();` 

Эта прокомментированная строка – это то, что вызывает у меня проблемы. Я хотел бы услышать звуковой сигнал на уровнях громкости различных аудиопотоков, но когда я включаю эту строку для STREAM_ALARM или любого другого аудиопотока, звук вообще не воспроизводится. Какие-нибудь идеи, что здесь можно сделать?

Solutions Collecting From Web of "Как правильно установить тип аудиопотока MediaPlayer"

Хорошо, я нашел решение после немного большего количества тестов, и это похоже на это, если кто-то сталкивается с той же проблемой, что и у меня. Для выполнения этого действия в манифесте необходимо разрешение MODIFY_AUDIO_SETTINGS.

 AudioManager am=(AudioManager)getSystemService(Context.AUDIO_SERVICE); am.setMode(AudioManager.MODE_NORMAL); MediaPlayer mp=new MediaPlayer(); Uri ringtoneUri=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); try { mp.setDataSource(getApplicationContext(), ringtoneUri); mp.setAudioStreamType(AudioManager.STREAM_NOTIFICATION); mp.prepare(); mp.start(); } catch(Exception e) { //exception caught in the end zone }