Ответ
Проблемы при разработке будильника:
-
Doze Mode и Background Execution Limits – Android ограничивает фоновые процессы. Решение:
AlarmManagerсsetExactAndAllowWhileIdle()илиWorkManagerдля точных срабатываний. -
Убийство процесса ОС – Приложение может быть закрыто. Решение:
Foreground Serviceс постоянным уведомлением. -
Громкость и режим "Не беспокоить" – Нужно запрашивать разрешение
DND_OVERRIDEи управлять аудио (AudioManager). -
Правильное время срабатывания – Учитывать
RTC(реальное время) vsRTC_WAKEUP(пробуждает устройство). -
Перезагрузка устройства – Будильники сбрасываются. Решение: ресивер
BOOT_COMPLETEDдля восстановления.
Пример:
val alarmManager = getSystemService(ALARM_SERVICE) as AlarmManager
val intent = Intent(this, AlarmReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(this, 0, intent, FLAG_IMMUTABLE)
alarmManager.setExactAndAllowWhileIdle(
AlarmManager.RTC_WAKEUP,
triggerTime,
pendingIntent
)