1

嗨,这里是一段代码......这个想法是它运行 20 秒,然后在 0 之前的 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();

}   


};
4

2 回答 2

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

因为你不能同时减少你的定时器和播放声音!:)

于 2012-02-16T19:57:08.960 回答
1

您正在转换millisUntilFinished为 seconds in timeLeft,然后告诉它仅在剩余 5000 秒(而不是毫秒)时播放。

当您进行更改以解决该问题时,您还应该将比较更改为,以便如果在剩余毫秒内调用timeLeft <= 5它,它将开始播放。当然,如果声音已经开始播放,您需要添加逻辑以不播放声音。onTick4999

于 2012-02-16T19:56:39.427 回答