2016-05-17 10 views
1

Ich frage mich, gibt es eine Grenze wie weit in der Zukunft wir eine Benachrichtigung über AlarmManager planen können?
Ich weiß, das klingt seltsam, aber ich frage mich, ob es eine Art von Zeitbeschränkung gibt, z.B. innerhalb von 2 WochenAndroid Benachrichtigung für zukünftiges Datum

Antwort

1

Nein, es gibt keine zeitliche Beschränkung, soweit ich das Lesen des API-Dokuments feststellen kann. Sie können das genaue Datum durch setExact festlegen.

Alarm Clock API Reference

0

Technisch Ich glaube, es ist eine Grenze in der set() Methode der AlarmManager aber es ist so groß, können Sie es grenzenlos betrachten.

Betrachten Sie dieses Beispiel:

long futureInMillis = ...; 
    AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, futureInMillis, pendingIntent); 

Die Grenze hier für futureInMillis ist Long.MAX_VALUE die (2^63)-1 oder 9,223,372,036,854,775,807 ist, aber ich gehe davon aus Sie nicht so lange warten werden zu müssen!

1

Es scheint keine Einschränkung in der Alarmmanager-Klasse zu sein, wie weit in die Zukunft kann ein Alarm eingestellt werden. Wenn Sie setExact() oder setWindow() nennen, wird der Alarmmanager implementation nicht erscheinen jede Validierung zu tun, darüber hinaus prüfen, ob der Alarm ein Datum in der Zukunft liegt, und ruft einfach eine IAlarmManager Dienst den Alarm einzustellen.

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) { 
     } 
    } 

Sie werden jedoch durch die 64 Bits in einem langen begrenzt werden, da nur eine begrenzte Auswahl an Daten dargestellt werden. Das bedeutet, wenn Sie einen Alarm über Sun Aug 17 07:12:55 UTC 292278994 hinaus einstellen, können Probleme auftreten.

Eine weitere zu beachtende Sache ist das Einstellen des Alarms unter Verwendung von RTC oder RTC_WAKE_UP, da dies Auswirkungen darauf hat, ob das Gerät durch den Alarm geweckt wird.

+0

Warum sollte das 64-Bit ein Problem sein? Dieses Datum ist kein echtes Problem, oder? – Jim

Verwandte Themen