2012-02-16 16 views
1

こんにちは、ここでのコードのsnipitです...アイデアは、それがカウントダウンの最後で、その後1つのサウンドを再生0 5秒前で、その後20秒間実行し、次を果たしている...しかし、ということですそれはちょうど終わりを演奏し、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(); 

} 


}; 

答えて

3

それはあなたを引き起こします:

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

あなたのタイマーを減少させ、同時にサウンドを再生カント原因! :)

+0

+1、これは主な問題です。私の答えによって解決されるいくつかのより簡単な問題が、これは実際に起こっていることです。 –

+0

あなたのコメントを見て、はい、あなたも正しい...彼は今までにはなかった2つの値を比較しようとしています。 – Cehm

1

あなたはtimeLeftに秒にmillisUntilFinishedを変換した後、左の5000秒(ミリ秒単位ではない)がある場合にのみプレイすることを指示しています。

これを修正するには、timeLeft <= 5にも変更する必要があります。onTickが呼び出され、4999ミリ秒が残っていると再生が開始されます。もちろん、すでに演奏が開始されている場合は、サウンドを再生しないロジックを追加する必要があります。

+0

私も代わりに5000の5はまだそれゆえ5000を動作しませんでした試みていることは – Djorn

+0

たとえそうだとしても、それは修正を必要とする...あなたの革ズボンを尋ねる前に、最終的な試みでした。また、私のポストの第2段落をチェックしてください。主な問題はCehmの答えによって解決される。 –

+0

@Djorn:システム上で何が起こっているかによって、onTickが正確に5000ミリ秒で呼び出されることはほとんどありません。それは、4095msの5005msで、またはこれらの値のいずれかの間、または+/-いずれかの値で呼び出すことができます。 – Squonk

関連する問題