2012-02-09 93 views
1

我想創建一些基於時間的事件使用天文鐘。下面的代碼正在成功顯示烤麪包機啓動5秒後的烤麪包,但我需要烤麪包機在5/10/20秒顯示。如果陳述使用onchronometerticklistener

我試過使用if(elapsedTime == 5000 || elapsedTime == 10000),但沒有烤麪包時顯示當我使用==。

任何想法?

Chronometer.OnChronometerTickListener mChronoListener = new OnChronometerTickListener() { // listens to journey timer to initiate time based events 

    public void onChronometerTick(Chronometer arg0) { 

     long elapsedTime = SystemClock.elapsedRealtime() - arg0.getBase(); 

     if (elapsedTime > 5000) 
     { 
      Toast.makeText(SafeDrive3Activity.this, "HOUR PASSED",  Toast.LENGTH_LONG).show(); 

     } 

    } 
}; 
+0

這似乎不大可能,你的'elapsedTime'將是基於1000毫秒整除什麼設備正在做這可能會導致延遲時間'onChronometerTick(...)'被調用。換句話說,經過的時間可能是5001ms或5020ms,這取決於延遲對聽衆的呼叫的其他情況。在這種情況下,對精確值使用'=='將不起作用 - 除以1000,然後使用'== 5'或'== 10'進行比較。更好的是,除以1000,然後查看結果是否可以被5或10使用模數('%'運算符)完全整除。 – Squonk 2012-02-09 15:48:05

+0

你是對的,謝謝! – Rob 2012-02-09 16:01:11

回答

0

嘗試這樣的事情(如果你想保持它此後每隔10秒會):

Chronometer.OnChronometerTickListener mChronoListener = new OnChronometerTickListener() { 
    // listens to journey timer to initiate time based events 
    int currentNeededTime = 5000; 
    public void onChronometerTick(Chronometer arg0) { 

     long elapsedTime = SystemClock.elapsedRealtime() - arg0.getBase(); 

     if (elapsedTime > currentNeededTime) 
     { 
      Toast.makeText(SafeDrive3Activity.this, "HOUR PASSED",  Toast.LENGTH_LONG).show(); 
      currentNeededTime += currentNeededTime == 5000 ? 5000 : 10000; 
     } 
    } 
}; 
+0

感謝這項工作:) – Rob 2012-02-09 16:00:44

+0

神奇,祝你好運。 – 2012-02-09 16:06:33