Как правильно настроить тип аудиопотока MediaPlayer
Я пытаюсь создать способ настройки параметров громкости для каждого из разных потоков (носителей, уведомлений, мелодий звонка и т.д.) и возможность предварительного просмотра уровня выходного звука каждого потока. Я считаю, что у меня правильная реализация, но когда я устанавливаю тип выходного потока, звук не воспроизводится.
Вот код, который правильно воспроизводит выбранный пользователем звуковой сигнал:
Uri mediaUri=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
MediaPlayer mp=MediaPlayer.create(getApplicationContext(), mediaUri);
//mp.setAudioStreamType(AudioManager.STREAM_ALARM);
mp.start();`
Эта прокомментированная строка - это то, что вызывает у меня проблемы. Я хотел бы услышать звуковой сигнал на уровнях громкости различных аудиопотоков, но когда я включаю эту строку для STREAM_ALARM или любого другого аудиопотока, звук вообще не воспроизводится. Любые идеи, что здесь можно сделать?
Ответы
Ответ 1
Хорошо, я нашел решение после немного большего количества тестов, и это похоже на то, если кто-то еще сталкивается с той же проблемой, что и у меня. Для этого необходимо использовать разрешение 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
}