2012-02-09 81 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