2011-11-26 966 views
5

我使用MediaPlayer播放内部警报铃声之一。 我使用setVolume(1.0f,1.0f)来最大化铃声播放时的音量。但铃声不打全卷(当我把它比作单独播放铃声或通过内置的Android就报警)Android MediaPlayer音量非常低(已调整音量)

这里是我的代码

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

我添加了以下权限android.permission .MODIFY_AUDIO_SETTINGS (不知道这是否需要)

任何想法,为什么mediaPlayer仍然不会最大发挥声音?

回答

11

这是我找到的解决方案。

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(); 
9

我遇到了同样的问题,然后发现这本在MediaPlayer documentation

虽然在准备状态,如音频/音量,screenOnWhilePlaying,循环性能,可以通过调用调整相应的设置方法。

调用setVolume调用prepare修复了这个,所以声音在最大音量播放。实际上,根据我刚才引用的文档,您应该在prepare之后拨打setLooping

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