当剩下一半的时间时,倒计时器播放声音

时间:2015-03-30 19:40:49

标签: java android audio countdowntimer

我有一个10秒长的CountDownTimer。我想在计时器上有一半的时间播放声音。我可以播放声音,但问题是音频播放了两次。

认为这就是我想要播放的声音:"你好。你好。"

它的表现如下:"嗨嗨你好。"。

当playAudio()不在onTick()方法内时播放正确。它有if(秒== 5)的东西。我不知道是什么。

 public class RestCountDownTimer extends CountDownTimer {

    public RestCountDownTimer(long startTime, long interval) {
        super(startTime, interval);
    }

    @Override
    public void onFinish() {
        if(txtRestTime != null){
            if(finishSound != 0){
                sp.play(finishSound, 1, 1, 0, 0, 1);
            }
            displayImage();
        }
    }

    @Override
    public void onTick(long millisUntilFinished) {
        if(txtRestTime != null){
            long seconds = (millisUntilFinished+1000) / 1000;
            txtRestTime.setText("" + seconds);
            if(seconds == 5){
                playAudio(audio);
            }
        }
    }
 }

2 个答案:

答案 0 :(得分:0)

尝试添加一些日志记录,看看你的onTick millisUntilFinished是否比你想象的更频繁地被调用。它可能被称为例如在5秒和5.5秒时,两者都会产生5的“秒”变量。你可能想要调整你正在使用的间隔,或者保存布尔声音播放,如果设置了则不再播放。

答案 1 :(得分:0)

因为我的CountDownTimer被初始化了,所以我遇到了问题。

restCountDownTimer = new RestCountDownTimer(30000,500);

如果我的间隔是1000,我就不会遇到问题。

这就是我解决它的方式。我创建了一个布尔状态变量来检查声音是否播放过一次。如果播放声音,则下次跳过它。

public class RestCountDownTimer extends CountDownTimer {
    private boolean stateAudio = false;

public RestCountDownTimer(long startTime, long interval) {
    super(startTime, interval);
}

@Override
public void onFinish() {
    if(txtRestTime != null){
        if(finishSound != 0){
            sp.play(finishSound, 1, 1, 0, 0, 1);
            stateAudio = false;
        }
        displayImage();
    }
}

@Override
public void onTick(long millisUntilFinished) {
    if(txtRestTime != null){
        long seconds = (millisUntilFinished+1000) / 1000;
        txtRestTime.setText("" + seconds);
        if((seconds == 5) && (stateAudio == false)){
            playAudio(audio);
            stateAudio = true;
        }
    }
}

}