Я пытаюсь разработать систему напоминаний, поэтому пользователь может вводить дни для напоминаний (MON, TUE ...) и раз, когда это напоминание будет срабатывать (только час и минуты). Это может быть любой день недели или несколько дней недели. Вот код для установки этих напоминаний:Тревожный менеджер: повторяющийся сигнал тревоги не всегда срабатывает
final AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
for (final Day day: reminder.getDays()) {
for (final ReminderTime reminderTime: reminder.getTimes()) {
final Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, reminderTime.getHour());
calendar.set(Calendar.MINUTE, reminderTime.getMinute());
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.DAY_OF_WEEK, day.getCalendarDay());
if (calendar.getTimeInMillis() < System.currentTimeMillis()) {
// final long daysDifference = DateUtils.getDaysDifference(calendar.getTimeInMillis(), System.currentTimeMillis());
// calendar.add(Calendar.DAY_OF_YEAR, (int) (daysDifference + 1));
calendar.add(Calendar.DAY_OF_YEAR, 7);
}
final Intent intent = createReminderIntent(context, reminder.getReminderType(), reminderTime, day);
final PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 7, sender);
}
}
Сигнал я получаю позже в обычае BroadcastReceiver
. Проблема в том, что напоминание время от времени стреляет, а иногда и нет, мне кажется, что что-то беспокоит дни. Мне интересно, была ли ошибка или что я делаю неправильно?
Вы устанавливаете одинаковый код запроса (ноль) для всех ожидающих намерений. Последний заменяет всех, кто пришел перед ним. Используя переменный код запроса, его следует исправить. Прочитайте обзор класса 'PendingIntent' (http://developer.android.com/reference/android/app/PendingIntent.html), чтобы понять, как это работает. –
Под переменным запросом вы подразумеваете всегда новый код запроса? Я знаю, как работает этот «PendingIntent», однако я не понимаю, почему нулевой код запроса недействителен для такого случая? Я думал, что флаг, который я устанавливаю в последнем параметре, определяет, будет ли он заменен, обновлен или отменен. –
Действительно, но вы хотите планировать одно и то же намерение несколько раз. Поэтому вам нужно создавать разные ожидающие намерения для каждого повторяющегося цикла. Один из способов обеспечить использование разных кодов запросов. –