在我的应用程序中,我有一个触发4 senerios警报的功能:
我使用以下内容成功实施了前3个senerios:
只有一次:
ftime
对于每日安排:
timezone
对于每周安排(根据系统日期):
tm_gmtoff
对于用户选择的自定义工作日(例如,仅适用于星期一和星期五,每周重复一次)我使用的是与迭代时每周调度相同的代码。但它不适用于星期一(星期五之前设定)和星期五工作。此外,如果今天(系统日期)是星期一或星期五,它不会触发今天的警报。
那么如何为一周中的自定义日实施每周警报计划?
答案 0 :(得分:10)
您无法告诉闹钟管理员您想要触发的日期。
一种解决方案是针对您希望每周重复触发一周的每一天发出警报。
因此,对于周一和周五的情况,您可以在周一设置每周重复提醒,并在周五设置每周重复提醒。
示例代码:
Julia()
答案 1 :(得分:1)
1) sunday=1, moday=2;, tuesday=3,......saturday=7
2)selectedDays.size()*(it will be which date you have selected , if you seleted monday , tues ,friday , then it will 3 size )*
3) for time if we choose from datetimepicker
**String[] timespilt = tv_timepicker.getText().toString().split(":");**
for (int i = 0; i < selectedDays.size(); i++) {
// for alarm ...
calNow = Calendar.getInstance();
calSet = (Calendar) calNow.clone();
int day = calSet.get(Calendar.DAY_OF_WEEK);
calSet.set(Calendar.HOUR_OF_DAY,Integer.parseInt(timespilt[0].trim()));
calSet.set(Calendar.MINUTE, Integer.parseInt(timespilt[1].trim()));
calSet.set(Calendar.SECOND, 0);
calSet.set(Calendar.MILLISECOND, 0);
calSet.set(Calendar.DAY_OF_WEEK,selectedDays.get(i));
if (calSet.compareTo(calNow) <= 0) {
//Today Set time passed, count to tomorrow
calSet.add(Calendar.DATE,7);
}
System.out.println("set time for alarmweekly==="+calSet.getTime());
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
PendingIntent alarmPI = PendingIntent.getBroadcast(this, (int) insertedId+selectedDays.get(i), alarmIntent, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, calSet.getTimeInMillis(), alarmPI);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calSet.getTimeInMillis(), (DateUtils.DAY_IN_MILLIS) * 7,
alarmPI);
}
答案 2 :(得分:0)
您已经说过,您使用的是每周调度的相同代码,“通过迭代”。如果我了解您尝试使用相同的PendingIntent
设置多个警报(在您的示例中为两个)。
当您设置使用相同待处理意图的第二个警报时,它 取代原来的警报。
这只是触发第二个警报的方式。
因此,为了解决您的问题,您只需为每个计划使用不同的PendingIntent
。
答案 3 :(得分:0)
这将解决您的问题。
private void scheduleAlarm(int dayOfWeek) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek);
// Accept the change here at this line to avoid skipping of current week.
if(calendar.getTimeInMillis() < System.currentTimeMillis()) {
calendar.add(Calendar.DAY_OF_YEAR, new GregorianCalendar().get(Calendar.DAY_OF_WEEK)-1);
}
// Set this to whatever you were planning to do at the given time
PendingIntent yourIntent;
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 7, yourIntent);
}
private void setUpAlarms() {
scheduleAlarm(Calendar.MONDAY);
scheduleAlarm(Calendar.FRIDAY);
}
这里要集中精力避免跳过本周。 :
calendar.add(Calendar.DAY_OF_YEAR, new GregorianCalendar().get(Calendar.DAY_OF_WEEK)-1);