我在屏幕上显示一个Timer。
要求是我需要在计时器持续时间为5秒时每秒播放一次声音。最后当它达到0(结束)时,我需要播放另一种声音。
我使用以下代码:
public void onTick(long millisUntilFinished) {
long timeLeft = secondsRemaining // I am getting the seconds left here
if (timeLeft <= 5) {
playAlertSound(R.raw.beep);
}
else if(timeLeft == 0){
playAlertSound(R.raw.beep1);
}
public void playAlertSound(int sound) {
MediaPlayer mp = MediaPlayer.create(getBaseContext(), sound);
mp.start();
mp.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
我使用上面的代码遇到的问题,虽然每个蜂鸣声持续时间小于1秒,但我得到声音的延续。我希望从剩下的5秒开始每秒都有单独的哔声,直到达到零。
此外,声音的音量太低。
请提供您的意见,我是否需要遵循任何其他逻辑?
提前致谢。
温暖的问候,
CB
答案 0 :(得分:0)
您应该确保使用setLooping功能禁用循环,对于音量问题,您可以使用setVolume功能设置播放音量。
但是,对于您的应用,您可能希望使用SoundPool类而不是MediaPlayer,因为当您想要多次播放相同的短音时,它更适合像您这样的情况。
使用示例代码,我也会颠倒设置onCompleteListener并开始播放的顺序,如下所示:
MediaPlayer mp = MediaPlayer.create(getBaseContext(), sound);
// move the mp.start() from here..
mp.setOnCompletionListener(new OnCompletionListener() {
// your handler logic here..
});
// and add the setLooping and setVolume calls here..
mp.setLooping(false);
mp.setVolume(1.0, 1.0);
mp.start(); // to here..
答案 1 :(得分:0)
我在没有OnCompletionListener的情况下尝试了这个代码,它没有循环工作正常吗?我想我不理解你的问题。另外...... setVolume(1.0,1.0)
不正确,你需要(浮动,浮动)不是双倍。