Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 倒数计时器在剩下一半时间时播放声音_Java_Android_Audio_Countdowntimer - Fatal编程技术网

Java 倒数计时器在剩下一半时间时播放声音

Java 倒数计时器在剩下一半时间时播放声音,java,android,audio,countdowntimer,Java,Android,Audio,Countdowntimer,我有一个10秒长的倒计时。我想在计时器上的时间过了一半时播放声音。我可以播放声音,但问题是音频播放了两次 我想这就是我想要演奏的声音:“嗨,你好。” 它是这样播放的:“嗨,你好吗?” 当playAudio()不在onTick()方法内时,它将正确播放。它有一些if(秒=5)。我不知道是什么 public class RestCountDownTimer extends CountDownTimer { public RestCountDownTimer(long startTime,

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

我想这就是我想要演奏的声音:“嗨,你好。”

它是这样播放的:“嗨,你好吗?”

当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);
            }
        }
    }
 }

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

因为我的倒计时是这样初始化的,所以我遇到了问题

restCountDownTimer=新的restCountDownTimer(30000500)

如果我的间隔时间是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;
        }
    }
}

}

您应该发布playAudio方法的代码。当playAudio()不在onTick()方法中时,它可以正确播放。它有一些if(秒=5)。我不知道是什么。