【发布时间】:2017-05-07 15:11:42
【问题描述】:
我想创建一个闹钟,它会首先在下一个午夜触发,然后在每个午夜之后重复。
尝试为 setRepeating() 方法中的 triggeratMillis 参数计算从现在到午夜的时间(以毫秒为单位)(因此第一个警报在下一个午夜) 但它一被创建就会立即触发。
private void resetAtMidnight() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Intent intent = new Intent(getApplicationContext(), MidnightReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),
MIDNIGHT_ALARM_ID, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis()-System.currentTimeMillis(),
AlarmManager.INTERVAL_DAY,
pendingIntent);
}
我尝试将日历对象最初设置为当前日期午夜,然后从日历午夜时间中减去当前时间(以毫秒为单位)。
然后我认为它可能认为指定的午夜是前一个午夜,所以我尝试将其设为当天晚上 11:59,但这也没有奏效,并且警报立即响起。
【问题讨论】:
-
triggerAtMillis参数是触发第一个警报的实际时间,而不是直到那时的间隔。适当地设置你的Calendar,然后只传递calendar.getTimeInMillis()。 This post 也可能对您有所帮助。
标签: java android alarmmanager