[英]Android MediaPlayer volume is very low ( already adjusted Volume )
我正在使用 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 仍然不会最大程度地播放声音吗?
这是我找到的解决方案。
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文档中注意到了这一点:
在Prepared状态下,可以通过调用相应的set方法来调整音频/音量,screenOnWhilePlaying,循环等属性。
在调用prepare
之后调用setVolume
修复此问题,以便以最大音量播放音频。 实际上,根据我刚才引用的文档,你应该在prepare
之后调用setLooping
:
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()
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.