1

こんにちはここにコードのスニピットがあります...アイデアはそれが20秒間実行され、0の前に5秒で1つのサウンドを再生し、カウントダウンの終わりに次のサウンドを再生するというものです...しかし、それは終わりを再生し、 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で秒に変換し、残りtimeLeft5000秒(ミリ秒ではない)の場合にのみ再生するように指示します。

これを修正するために変更を加えているので、比較をに変更して、残りのミリ秒で呼び出されたtimeLeft <= 5場合に再生を開始するようにする必要があります。もちろん、すでに再生が開始されている場合は、サウンドを再生しないようにロジックを追加する必要があります。onTick4999

于 2012-02-16T19:56:39.427 に答える