我有一个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);
}
}
}
}
答案 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;
}
}
}
}