嗨,这是一段代码...想法是它运行20秒然后在5秒之前它播放一个声音然后在倒计时结束时播放下一个...但它只是播放结束并且跳过了5秒的标记...我试过玩它但却无法让它工作。
有什么想法吗?
//Counter 2
final CountDownTimer counter2 = new CountDownTimer(20000 , 1000) {
public void onTick(long millisUntilFinished) {
mCounter2TextField.setText(" " + formatTime(millisUntilFinished));
long timeLeft = millisUntilFinished / 1000;
if (timeLeft == 5000)
playAlertSound(R.drawable.sound1);
}
public void onFinish() {
start();
playSound();
}
public void playSound() {
MediaPlayer mp = MediaPlayer.create(getBaseContext(), (R.drawable.sound2));
mp.start();
}
};
答案 0 :(得分:4)
这是因为你的:
playSound(...);
与您的计时器位于同一个“线程”中。你应该做的事情如下:
if (timeLeft == 5000)
new Runnable(){
void Run(){
playAlertSound(R.drawable.sound1);
}
public void playSound() {
MediaPlayer mp = MediaPlayer.create(getBaseContext(), (R.drawable.sound2));
mp.start();
}
}.run();
或类似的东西:D
因为您无法同时减少定时器和播放声音! :)
答案 1 :(得分:1)
您将millisUntilFinished
转换为timeLeft
中的秒数,然后告诉它仅在剩余5000秒(非毫秒)时播放。
由于您正在进行更改以解决此问题,因此您还应将比较更改为timeLeft <= 5
,以便在调用onTick
并剩4999
毫秒的情况下开始播放。当然,如果声音已经开始播放,你需要添加逻辑来播放声音。