报警的设置重复第一个触发问题

时间:2014-01-07 20:07:03

标签: android alarmmanager

有人可以解释为什么以下代码正常工作(即第一次警报触发,延迟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);

1 个答案:

答案 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()

相关问题