У меня ооочень много проблем с тем, чтобы мой радио-будильник работал должным образом, и я прочитал здесь много тем по этой теме, но, к сожалению, ни одна из них мне не помогла.
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent penInt = PendingIntent.getBroadcast(this, intentId, intent, 0);
Этот метод различия между уровнями API я нашел здесь, в stackoverflow, и поместил его в свою функцию calcNextAlarm()
(плюс несколько сообщений журнала для отладки), чтобы правильно установить сигнал тревоги независимо от того, какой API используется на устройстве:
// problems in doze mode api 23+
if (Build.VERSION.SDK_INT >= 23) {
if (testMode) Log.d("Ben", "setAlarmClock() - API 23+");
am.setAlarmClock(new AlarmManager.AlarmClockInfo(alarmTimeInMillis, penInt), penInt);
}
else if (Build.VERSION.SDK_INT >= 19) {
// Wakes up the device in Idle Mode
if (testMode) Log.d("Ben", "setExact() - API >= 19 && API < 23");
am.setExact(AlarmManager.RTC_WAKEUP, alarmTimeInMillis, penInt);
}
// Old APIs
else {
if (testMode) Log.d("Ben", "set() - API < 19");
am.set(AlarmManager.RTC_WAKEUP, alarmTimeInMillis, penInt);
}
Согласно сообщениям Log.d, я вижу, что на моем устройстве Android 7.1 выполняется первый метод setAlarmClock()
для установки будильника в Receiver.
Я действительно впадаю в отчаяние после 3 недель безуспешных тестов и кодирования - мой будильник сегодня снова сработал на 4 минуты позже - этого никогда не должно произойти, согласно странице обучения режиму дремоты:
Будильники, установленные с помощью setAlarmClock(), продолжают нормально срабатывать — система выходит из режима ожидания незадолго до срабатывания этих будильников.
На моем телефоне 7.1 будильник даже запаздывает от 20 секунд до 1:40 минут, когда я устанавливаю будильник на «сейчас +5 или 6» минут. Может ли кто-нибудь посоветовать мне, как действительно ВСЕГДА отключить сигнализацию вовремя?