Пробовал ли делать приложение будильник

Ответ

Да, делал. Основные сложности: работа с AlarmManager и WakeLock для гарантированного срабатывания, обработка Doze Mode, создание персистентного уведомления для Android 8+.

Пример установки будильника:

val alarmManager = context.getSystemService(ALARM_SERVICE) as AlarmManager
val intent = Intent(context, AlarmReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(context, requestCode, intent, FLAG_IMMUTABLE)

alarmManager.setExactAndAllowWhileIdle(
    AlarmManager.RTC_WAKEUP,
    triggerTime,
    pendingIntent
)

Для Android 10+ важно запрашивать SCHEDULE_EXACT_ALARM permission. Также учитывал различия в API уровней и тестировал на разных устройствах.

Ответ 18+ 🔞

А, ну это классика, ёпта! Слушай, я с этими будильниками на Андроиде так намучился, что готов уже ебать мои старые костыли. Казалось бы, что сложного — поставить таймер, чтобы он сработал. Ан нет, хуй с горы!

Основная засада была в двух вещах. Первое — это AlarmManager и WakeLock, чтобы твой будильник не проспал, когда телефон в глубоком сне. Второе — это этот ёперный театр с Doze Mode, который на новых андроидах так экономит батарею, что твоему алёрму просто пиздец наступает.

И да, не забудь про персистентное уведомление для восьмёрки и выше, а то система твой сервис прибьёт, как муху, и будильник нихуя не сработает. Доверия к этой системе — ноль ебать.

Вот, смотри, как я это делал, чтоб хоть как-то работало:

val alarmManager = context.getSystemService(ALARM_SERVICE) as AlarmManager
val intent = Intent(context, AlarmReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(context, requestCode, intent, FLAG_IMMUTABLE)

alarmManager.setExactAndAllowWhileIdle(
    AlarmManager.RTC_WAKEUP,
    triggerTime,
    pendingIntent
)

Ключевой момент — setExactAndAllowWhileIdle. Без этого в режиме Doze можешь забыть о точном времени. Но и это не панацея, чувак.

А ещё для десятки и выше нужно явно запрашивать разрешение SCHEDULE_EXACT_ALARM, иначе система тебе просто скажет «иди нахуй» и проигнорирует точный алёрм. Удивление пиздец, когда вроде всё сделал, а оно не работает, а оказывается, пермишна не дал.

Пришлось овердохуища времени потратить, чтобы всё это учесть: различия в API, протестить на куче разных девайсов, от древних кирпичей до последних флагманов. Каждый твик по-своему косячит. В общем, задача на терпение, которого у меня уже ноль ебать осталось.