1

我正在制作一个闹钟应用程序。我需要播放我设置的用户选择的音调RingtoneManager。当闹钟响起时,这就是我播放闹钟铃声的方式:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
Uri alarmSound = prefs.getString("alarmSound", ""); //alarmSound is the Uri of alarm tone
MediaPlayer mp = MediaPlayer.create(NormalAlarm.this, alarmSound);
try 
{
    mp.setAudioStreamType(AudioManager.STREAM_ALARM);
    mp.setLooping(true);
    mp.start();
} 
catch (IllegalStateException e) 
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}

它工作正常,但它使用的音量当然是Media Volume手机的音量。我如何使它与Alarm Volume手机一起使用?我正在使用MediaPlayer,因为我希望警报音重复直到用户停止警报。

谢谢你的帮助!

4

2 回答 2

3

MediaPlayer.setAudioStreamType()是您正在寻找的:

mp.setAudioStreamType(AudioManager.STREAM_ALARM);
mp.setLooping(true);
mp.start();
于 2012-10-04T17:25:43.230 回答
0

问题是您MediaPlayer.create()用于创建 MediaPlayer。Create函数调用prepare()最终确定您的媒体并且不允许您更改的函数AudioStreamType

解决方案是使用setDataSource而不是 create():

MediaPlayer mp = new MediaPlayer();
mp.setAudioStreamType(AudioManager.STREAM_ALARM);
mp.setLooping(true);
try {
   mp.setDataSource(NormalAlarm.this, alarmSound);
   mp.prepare();
} catch (IOException e) {
   e.printStackTrace();
}
mp.start();

有关更多信息,请参阅此链接

于 2017-01-04T00:30:09.017 回答