在倒计时结束前播放声音

时间:2012-02-16 19:52:48

标签: android timer countdowntimer

嗨,这是一段代码...想法是它运行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();

}   


};

2 个答案:

答案 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毫秒的情况下开始播放。当然,如果声音已经开始播放,你需要添加逻辑来播放声音。