2

我已经阅读了很多文章,但是我没有找到/或只是错过了关于我的具体问题的答案,这很奇怪,因为我认为我正在尝试实施一个常见案例。好吧,我想要的是将警报设置为除周末之外的每一天,所以从周一到周五的某个特定时间。

目前我接下来要做:

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);
  }

但我不确定这个逻辑的正确性。你能 1. 纠正我,如果我错过了什么 2. 建议一些适当的解决方案或只是你的想法来完成我的任务

更新:

好吧,我想到了下一个:如果我

calendar.set(Calendar.DAY_OF_WEEK, 1);

接着

am.setRepeating(AlarmManager.RTC_WAKEUP, date.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 5, pendingIntent);

所以结果我将初始日期设置为星期一并重复5次,所以星期一到星期五,无论当前日期是什么,当用户设置闹钟时,它是正确的还是我错过了smth?顺便说一句,我如何更新 setRepeating 以将其设置为每周重复,而不仅仅是一个?

更新1:

我想我理解了我的错误,通过使用上面的代码,我会做一些奇怪的事情,所以初始化日是星期一,但是重复间隔是 5 天一次,而不是星期一到星期五的每一天。

4

1 回答 1

1

似乎唯一的解决方案是设置

am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

在我在 Intent 构造函数中指定的火灾处理程序中,检查当前日期,如果是星期六或星期日,则避免通知。

...
  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);
  }

顺便说一句,请告诉我,我已将警报设置为重复模式,第一次触发,然后我打开模拟器设置并手动将日期移动到明天和时间,但没有发出警报通知,是不是用模拟器或者我在代码中有一些错误?

于 2013-11-07T13:24:04.657 回答