Как правильно установить тип аудиопотока MediaPlayer - PullRequest
11 голосов
/ 21 августа 2010

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

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

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

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

1 Ответ

23 голосов
/ 22 августа 2010

Хорошо, я нашел решение после еще большего тестирования, и оно выглядит так, на случай, если кто-то столкнется с той же проблемой, что и я. Чтобы это работало, в манифесте необходимо разрешение 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...