我已经阅读了很多文章,但是我没有找到/或者只是错过了我特定静止的答案,这很奇怪,因为我认为我正在尝试实施一个常见的案例。 好吧,我想说的是除了周末之外每天都要发出警报,所以从某个特定时间的星期一到星期五。
目前我接下来会这样做:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
Intent intent = creating an Intent here
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
据我所知,由于AlarmManager.INTERVAL_DAY,下一段代码会在我指定的时间发出警报并每天都会发出警报。
我考虑过下一步来完成我的任务:
for(int i = 1; i < 6; i++) {
calendar.add(Calendar.DAY_OF_WEEK, i);
}
但我不确定,关于这种逻辑的正确性。 请你 如果我错过了什么,请纠正我 2.建议一些正确的解决方案或只是你的想法来完成我的任务
更新
好吧,我考虑过下一个: 如果我
怎么办?calendar.set(Calendar.DAY_OF_WEEK, 1);
然后
am.setRepeating(AlarmManager.RTC_WAKEUP, date.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 5, pendingIntent);
因此,我将设置第一天到周一并重复5次,所以周一至周五,无论当前日期是什么,当用户设置闹钟,是正确还是我错过了? 顺便问一下,我如何更新setRepeating以将其设置为每周重复,而不仅仅是一个?
UPDATE1:
我想我理解了我的错误,通过使用上面的代码,我会做一些奇怪的事情,所以初始日是星期一,但重复间隔是5天一次,而不是从星期一到星期五的每一天。
答案 0 :(得分:1)
似乎唯一的解决方案是设置
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
并在我在Intent构造函数中指定的fire处理程序中,检查当前日期,如果是星期六或星期日则避免通知。
...
if(intent.getBooleanExtra(INTENT_NOTIFY, false) && !isWeekend())
showNotification();
...
private boolean isWeekend() {
Calendar calendar = Calendar.getInstance();
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
return (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY);
}
顺便说一句,请告诉我,我已经在重复模式下设置闹钟,第一次触发,然后我打开模拟器设置并手动将日期移至明天和时间,但没有触发警报通知,是吗smth与模拟器或我在代码中有一些错误?