我想让我的应用程序在将来执行代码。
我想这样做:
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 :(得分:1)
你必须得到now和beep.gettime()之间的区别,并将它传递给postattime函数。由于正常运行时间用作基准,如果手机进入深度睡眠状态可能不准确。
beep.gettime - now + SystemCLock.uptimeMillis()
应该传递给postattime函数
您目前正在传递相当于1970年1月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会将其设置为当前时间,您可以更改任何您喜欢的变量,例如上面的变量。例如,这将在当月2日的1:55创建时间。然后,您可以将此设置为
的时间beepTime.getTimeInMillis()
将其弹出到你的postAtTime方法
编辑:我对你的问题肯定不够了解,但是使用AlarmManager可能会更好。我知道即使程序没有运行,它仍然有效,而我认为PostDelayed不会。如果我错了,请随意纠正我!