2016-05-17 4 views
1

Мне было интересно, есть ли предел того, как далеко в будущем мы можем запланировать уведомление через AlarmManager?
Я знаю, это звучит странно, но мне было интересно, существует ли какое-то ограничение по времени, например. в течение 2 недельУведомление Android на будущую дату

ответ

1

Нет ограничений по времени, насколько я могу сказать, прочитав документ API. Вы можете установить точную дату на setExact.

Alarm Clock API Reference

0

Технически я считаю, что это предел в 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, но я предполагаю, что вы не будете необходимости ждать так долго!

1

В классе 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, так как это повлияет на то, что устройство разбужено сигналом тревоги.

+0

Почему 64-битная проблема? Эта дата не является реальной проблемой? – Jim