有人可以解释为什么以下代码正常工作(即第一次警报触发,延迟20秒):
Calendar cal = Calendar.getInstance();
cal.add (Calendar.SECOND,20);
am = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC, cal.getTimeInMillis(), 20000, PendingIntent pi);
而以下是NOT(即第一次警报立即触发):
am = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC, SystemClock.elapsedRealtime() + 20000, 20000, PendingIntent pi);
答案 0 :(得分:0)
SystemClock.elapsedRealtime()
[1]返回自启动以来的毫秒数。
cal.getTimeInMillis()
[2]返回自UNIX Epoch(1970/01/01)以来的毫秒数......基于您的代码。
第一个代码块实际上是在将来安排警报20秒。
第二个代码块实际上是在遥远的过去安排一个警报(除非你在1970年1月1日启动你的手机!)并且警报运行的时间已经过去了。警报还没有运行,因此它现在运行它已标记时间已过去。
[1] http://developer.android.com/reference/android/os/SystemClock.html#elapsedRealtime()
[2] http://developer.android.com/reference/java/util/Calendar.html#getTimeInMillis()