这是播放重复闹铃音的正确方法吗?

时间:2012-10-04 15:00:25

标签: android android-mediaplayer android-alarms

我正在制作一个警报应用。我需要播放用户选择的音调,我通过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,因为我希望警报音重复,直到用户停止闹钟。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

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

mp.setAudioStreamType(AudioManager.STREAM_ALARM);
mp.setLooping(true);
mp.start();

答案 1 :(得分: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();

有关详细信息,请参阅this link