2014-11-05 4 views
0

Я использую CountDownTimer. Я бы хотел сыграть звук в определенное время только для советов. Ну вот мой код:CountDownTimer onTick

@Override 
     public void onTick(long l) { 


      if((TimeUnit.MILLISECONDS.toSeconds(l) - 
        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(l))) == 10){ 
       reproducirAviso(); 
      } 

      tiempo.setText(String.format("%02d:%02d", TimeUnit.MILLISECONDS.toMinutes(l), 
        TimeUnit.MILLISECONDS.toSeconds(l) - 
          TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(l)))); 

     } 

Что происходит? Метод «reproducirAviso()» вызывается несколько раз, и звук воспроизводится прерывистым ... Что можно сделать для решения этой проблемы? Большое спасибо заранее !!!

ответ

0

Если вы хотите, чтобы recducirAviso() не вызывался несколько раз, добавьте флаг, чтобы проверить, не работает ли уже воспроизводимыйAviso().

Например, где установлен статический булево как

public static boolean reproducing = false; 

public void reproducirAviso() 
{ 
    // 
    // lots of your code 
    // 
    reproducing = false;  
} 

поэтому код становится

@Override 
public void onTick(long l) 
{ 
    if(!reproducing && (TimeUnit.MILLISECONDS.toSeconds(l) - 
      TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(l))) == 10){ 
     reproducirAviso(); 
    } 

    tiempo.setText(String.format("%02d:%02d", TimeUnit.MILLISECONDS.toMinutes(l), 
      TimeUnit.MILLISECONDS.toSeconds(l) - 
        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(l)))); 

} 
+0

Большое спасибо за ответ, но я уже думал об этом решении не повезло! – oneme

+0

ОК. какие другие решения приходят к вам? – Willmore

+0

Прежде всего, я должен сказать, что я использую Genymotion, и я обнаружил, что некоторые звуки плохо воспроизводятся. Именно по этой причине я не могу отказаться от вашего выбора. Я хотел бы попробовать его в реальном устройстве и проверить, является ли проблема Genymotion. – oneme

Смежные вопросы