Громкость Android MediaPlayer очень низкая (уже настроена громкость)
Я использую 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 по-прежнему не будет воспроизводить звук на максимуме?
3 ответа
Вот решение, которое я нашел.
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();
Я столкнулся с той же проблемой, а затем заметил это в документации MediaPlayer:
Находясь в состоянии "Подготовлено", такие свойства, как громкость звука / звука, screenOnWhilePlaying, зацикливание, можно регулировать, вызывая соответствующие методы набора.
призвание setVolume
после звонка prepare
исправляет это, так что звук воспроизводится на максимальной громкости. На самом деле, согласно документам, которые я только что процитировал, вы должны позвонить setLooping
после prepare
также:
mediaPlayer.setDataSource(context, ringtoneUri);
mediaPlayer.prepare();
mediaPlayer.setLooping(looping);
mediaPlayer.setVolume(1.0f, 1.0f);
mediaPlayer.start();
Поскольку setAudioStreamType() теперь устарел, вместо этого следует использовать метод setAudioAttributes(). Ниже приведен полный пример
var mediaPlayer: MediaPlayer = MediaPlayer()
fun playAudio(audioUrl: String) {
mediaPlayer.apply {
if (isPlaying) {
stop()
reset()
release()
}
}
mediaPlayer = MediaPlayer()
try {
mediaPlayer.apply {
setAudioAttributes(
AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.setUsage(AudioAttributes.USAGE_ALARM)
.build()
)
setVolume(2f,2f)
setDataSource(audioUrl)
prepare()
start()
}
} catch (e: IOException) {
e.printStackTrace()
}
}