Мне было интересно, есть ли предел того, как далеко в будущем мы можем запланировать уведомление через AlarmManager
?
Я знаю, это звучит странно, но мне было интересно, существует ли какое-то ограничение по времени, например. в течение 2 недельУведомление Android на будущую дату
ответ
Нет ограничений по времени, насколько я могу сказать, прочитав документ API. Вы можете установить точную дату на setExact
.
Технически я считаю, что это предел в set()
методе AlarmManager
но настолько велик, вы можете рассмотреть его безграничны.
Рассмотрим следующий пример:
long futureInMillis = ...;
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, futureInMillis, pendingIntent);
Предел здесь futureInMillis
является Long.MAX_VALUE
который (2^63)-1
или 9,223,372,036,854,775,807
, но я предполагаю, что вы не будете необходимости ждать так долго!
В классе AlarmManager не существует ограничений относительно того, как далеко в будущем может быть установлен сигнал тревоги. Когда вы вызываете setExact() или setWindow(), AlarmManager implementation не выполняет никаких проверок, не проверяя, что дата тревоги будет в будущем, и просто вызывает службу IAlarmManager для установки будильника.
private void setImpl(int type, long triggerAtMillis, long windowMillis, long intervalMillis,
PendingIntent operation, WorkSource workSource, AlarmClockInfo alarmClock) {
if (triggerAtMillis < 0) {
/* NOTYET
if (mAlwaysExact) {
// Fatal error for KLP+ apps to use negative trigger times
throw new IllegalArgumentException("Invalid alarm trigger time "
+ triggerAtMillis);
}
*/
triggerAtMillis = 0;
}
try {
mService.set(type, triggerAtMillis, windowMillis, intervalMillis, operation,
workSource, alarmClock);
} catch (RemoteException ex) {
}
}
Вы, однако, быть ограничено 64 битами в длинной, так как может быть представлено лишь конечное диапазон дат. Это означает, что если вы планируете установить аварийный сигнал за пределами Sun Aug 17 07:12:55 UTC 292278994, у вас могут возникнуть проблемы.
Еще одна вещь, которую следует учитывать, - установить будильник с помощью RTC или RTC_WAKE_UP, так как это повлияет на то, что устройство разбужено сигналом тревоги.
Почему 64-битная проблема? Эта дата не является реальной проблемой? – Jim