Piy*_*ush 10 android broadcastreceiver alarmmanager
我有一个BroadcastReceiver
重新安排启动和时间变化等事件的警报.但是当时间超过警报的触发时间时(例如,当用户手动更改设置的时间时),AlarmManager
在我可以添加一天重新安排警报之前立即触发警报.我怎么能避免这个?
我目前正在使用set并添加方法Calendar
来安排警报.
for (int dayOfWeek = Calendar.SUNDAY; dayOfWeek <= Calendar.SATURDAY; dayOfWeek++) {
if (alarm.getRepeatingDay(dayOfWeek - 1) && dayOfWeek >= nowDay &&
!(dayOfWeek == nowDay && alarm.timeHour < nowHour) &&
!(dayOfWeek == nowDay && alarm.timeHour == nowHour && alarm.timeMinute <= nowMinute)) {
calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek);
alarmSet = true;
break;
}
}
if (!alarmSet) {
for (int dayOfWeek = Calendar.SUNDAY; dayOfWeek <= Calendar.SATURDAY; dayOfWeek++) {
if (alarm.getRepeatingDay(dayOfWeek - 1) && dayOfWeek <= nowDay) {
calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek);
calendar.add(Calendar.WEEK_OF_YEAR, 1);
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
它也在文档中说明:
如果指定的触发时间是过去的,则会立即触发警报.
如何改变这种行为?
这是有意的。参见例如设置重复闹钟
一个触发时间。如果您指定的触发时间在过去,则立即触发警报。
或者在这里一样
如果规定的触发时间在过去,将立即触发警报。
为避免这种情况,您必须在添加警报之前手动检查警报,
if(alarmTimeStamp < System.currentTimeMillis()) {
// if is repeating schedule in __interval__
// else ignore
}
Run Code Online (Sandbox Code Playgroud)
如果日期已经过去,或者在您的接收器中忽略它们。
归档时间: |
|
查看次数: |
1169 次 |
最近记录: |