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