Громкость Android MediaPlayer очень низкая (уже настроена громкость) - PullRequest
6 голосов
/ 26 ноября 2011

Я использую MediaPlayer для воспроизведения одной из внутренних мелодий будильника. Я использую setVolume (1.0f, 1.0f), чтобы максимизировать громкость при воспроизведении мелодии звонка. но рингтон не воспроизводит полную громкость (когда я сравниваю его с игрой на рингтоне отдельно или через встроенный будильник Android)

вот мой код

mediaPlayer.setDataSource(context, ringtoneUri);
mediaPlayer.setLooping(looping);
mediaPlayer.setVolume(1.0f, 1.0f);
mediaPlayer.prepare();
mediaPlayer.start();

Я добавил следующее разрешение android.permission.MODIFY_AUDIO_SETTINGS (не уверен, если это необходимо)

Есть идеи, почему mediaPlayer по-прежнему не воспроизводит звук максимально?

Ответы [ 2 ]

12 голосов
/ 28 ноября 2011

Вот решение, которое я нашел.

AudioManager amanager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
int maxVolume = amanager.getStreamMaxVolume(AudioManager.STREAM_ALARM);
amanager.setStreamVolume(AudioManager.STREAM_ALARM, maxVolume, 0);

MediaPlayer mediaPlayer= new MediaPlayer();

mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); // this is important.

mediaPlayer.setDataSource(context, ringtoneUri);
mediaPlayer.setLooping(looping);  
mediaPlayer.prepare();
mediaPlayer.start();
10 голосов
/ 07 марта 2013

Я столкнулся с той же проблемой, а затем заметил это в документации MediaPlayer :

В состоянии «Подготовлено» такие свойства, как громкость звука / звука, screenOnWhilePlaying,зацикливание можно настроить, вызвав соответствующие методы набора.

Вызов setVolume после вызов prepare исправляет это, так что звук воспроизводится на максимальной громкости.На самом деле, согласно документам, которые я только что цитировал, вы должны также позвонить setLooping после prepare:

mediaPlayer.setDataSource(context, ringtoneUri);
mediaPlayer.prepare();
mediaPlayer.setLooping(looping);
mediaPlayer.setVolume(1.0f, 1.0f);
mediaPlayer.start();
...