
Знакомая история: поставили напоминание на 10:00, а телефон звякнул в 10:07. Дело обычно не в приложении и не в “глючном телефоне”. Дело в том, как Android с двенадцатой версии обращается с будильниками.
Что изменилось в Android 12
Раньше приложение могло попросить систему разбудить его в точный момент, и система это делала. Дальше выяснилось очевидное: если так делают сорок приложений, телефон просыпается сорок раз за час и садится к обеду. Поэтому появилось разделение.
Неточный будильник система имеет право отложить. Она собирает такие срабатывания в пачки и будит устройство один раз на всех, иногда через минуту, иногда через пятнадцать. Для проверки обновлений это правильно.
Точный будильник срабатывает в указанную секунду, но требует отдельного разрешения. С Android 12 (API 31) это SCHEDULE_EXACT_ALARM, которое пользователь может отозвать в настройках. С Android 13 (API 33) появилось USE_EXACT_ALARM. Оно выдаётся при установке, но доступно только приложениям, у которых напоминания и будильники составляют основную функцию.
Как понять, что разрешения нет
Приложение об этом знает, а вот пользователь обычно нет. Симптом один: уведомления приходят примерно тогда, причём разброс плавает, то минута, то десять. Никакой ошибки при этом не показывается, система молча планирует событие как неточное.
Поэтому в KIPRI статус вынесен на экран настроек уведомлений отдельной строкой: “Точное время: включено” или предложение выдать разрешение. Приложение, которое обещает напомнить вовремя, обязано показывать, может ли оно выполнить это обещание.
Что ещё мешает уведомлениям
Разрешение на точные будильники необходимо, но одного его мало.
- Оптимизация батареи. Многие оболочки, особенно Xiaomi, Huawei и Samsung в агрессивных режимах, усыпляют приложения, которыми давно не пользовались. Помогает исключение приложения из оптимизации.
- Отключённые каналы уведомлений. В Android уведомления сгруппированы по каналам, и канал можно выключить отдельно от приложения целиком.
- Режим “Не беспокоить”. Он гасит звук, но уведомление всё равно приходит. Стоит проверить, не в нём ли дело, прежде чем винить приложение.
- Лимит запланированных уведомлений. На iOS их не может быть больше 64 одновременно, и приложения обходят это, планируя ближайшие события и дозаполняя очередь при запуске. KIPRI держит в системе примерно месяц вперёд и достраивает очередь на старте.
Практический вывод
Если напоминания приходят с опозданием, порядок проверки такой: разрешение на точные будильники, затем исключение из оптимизации батареи, затем каналы уведомлений. В девяти случаях из десяти дело в первом пункте, и лечится оно одним переключателем. Весь порядок под вашу марку телефона собран в проверке настроек.
А приложение со своей стороны обязано не молчать: показать статус, объяснить, что даст разрешение, и дать кнопку. Молчаливое опоздание разрушает доверие к напоминаниям быстрее любой другой ошибки, потому что напоминание, которому не веришь, бесполезно.
А если промолчало не напоминание приложения, а обычный будильник в «Часах», дело почти никогда не в разрешениях. Там свои ловушки: беззвучный режим без вибрации, исключения режима «Не беспокоить», отдельная громкость будильника. Они разобраны в статье о том, почему не сработал будильник.
Статья помогла?
Спасибо, это лучший ответ. Раз помогло, может пригодиться и кому-то ещё.
Спасибо, что сказали. Напишите, чего не хватило, и статью дополним: [email protected]
