2012-01-06 38 views
0

我希望我的应用程序在将来的某个时候执行代码。如何使用Android的Handler.PostDelayed在特定时间发生事件?

我想做的事:

Date now = new Date(); 

    for (Date beep : scheduledBeeps) { 
     if (beep.after(now)) 
     { 
      Logger.i("adding beep"); 
      m_beepTimer.postAtTime(beepNow, beep.getTime()); 
     } 
    } 

在日志中我可以看到加4个蜂鸣声,但他们从来不火。我假设它与uptimeMillis有关,但我不知道该怎么做。

+0

您是否希望它成为未来的特定时间或特定的时间? – 2012-01-06 21:15:18

回答

1

您将不得不区分现在和beep.gettime()并将其传递给postattime函数。由于正常运行时间用作基准,因此如果手机进入深度睡眠状态,则可能不准确。

beep.gettime - 现在+ SystemCLock.uptimeMillis()

应该传递给postattime功能

您正在传递一个非常大的数字相当于目前毫秒从1970年1月1日。

0

您可以使用Calendar类来设置某个时间点。

Calendar beepTime = Calendar.getInstance(); 

beepTime.set(Calendar.DAY_OF_MONTH, 2); 
beepTIme.set(Calendar.HOUR_OF_DAY, 01); 
beepTime.set(Calendar.MINUTE, 55); 
beepTime.set(Calendar.SECOND, 00); 

getInstance会将其设置为当前时间,并且您可以更改任何您喜欢的变量,例如上面的那些变量。例如,这会在当月的第二天以1:55创建一个时间。这样,你会设置这是与

beepTime.getTimeInMillis() 

熄灭刚刚流行的是到您的postAtTime方法

编辑时间:此外,我不知道有足够的了解你的问题肯定地说,但它可能会更好地使用AlarmManager。我知道,即使程序没有运行,这仍然有效,但我不认为PostDelayed。如果我错了,随时纠正我!

相关问题