Мне удалось все правильно создать службу уведомлений, используемую для запуска уведомления в результате тревоги. К сожалению, настройка будильника с помощью AlarmManager не работает правильно. Он срабатывает несколько минут спустя (не точно часов, что указывает на проблему с часовым поясом). Повторяющийся период составляет 1 неделю, поэтому я использовал константу INTERVAL_DAY и умножал ее на 7. Чтобы убедиться, что один PendingIntent не заменяет другой, я передаю dayOfWeek как второй параметр для PendingIntent.getService(). Я проверяю правильность времени срабатывания будильника, регистрируя его:
Log.d(TAG, "next alarm " + df.format(cal.getTime()));
Невозможно ли перечислить все установленные сигналы - по крайней мере, из моего собственного приложения? Я считаю, что это единственный способ отследить ошибку.
Мой код:
cal.setTimeInMillis(System.currentTimeMillis());
cal.add(Calendar.DATE, 1);
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, minute);
Log.d(TAG, "next alarm " + df.format(cal.getTime()));
Intent showNotificationIntent = new Intent(context, NotificationService.class);
dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
alarmIntent = PendingIntent.getService(context, dayOfWeek, showNotificationIntent, 0);
getAlarmManager(context).setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
INTERVAL_WEEK, alarmIntent);
Я хочу предлагать будильник каждый день, но в разное время, которое может быть задано пользователем. Поэтому я использую до 7 аварийных сигналов, которые должны срабатывать еженедельно.
Даже после прочтения многочисленных ответов на подобные вопросы (я не собираюсь создавать дублирующий вопрос), мне не удалось найти проблему.