Вы устанавливаете setInexactRepeating()
, который, как следует из его названия, не может быть запущен в указанное вами время.Это оптимизация, поэтому операционная система пытается получить более одного аварийного сигнала, который должен сработать в одинаковое время для одновременного срабатывания всех из них.
Вместо этого вы можете использовать void setExactAndAllowWhileIdle(int type, long triggerAtMillis, PendingIntent operation)
.См. документацию .
Пример:
alarmManager.setExactAndAllowWhileIdle(android.app.AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
В соответствии с рекомендациями, не следует использовать повторяющийся сигнал тревоги с точным временем.Вместо этого вы можете подождать, пока не сработает точный сигнал, а затем запланировать еще один сигнал на следующий день.
Для API ниже 23 вы можете использовать void setExact(int type, long triggerAtMillis, PendingIntent operation)
.А для API ниже 19 вы можете использовать void setRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation)
с ожидаемым точным срабатыванием, как всегда.