未来日期的Android通知

时间:2016-05-17 19:37:55

标签: java android alarmmanager

我想知道将来我们可以通过AlarmManager安排通知的时间有限吗? 我知道这听起来很奇怪,但我想知道是否存在某种时间限制,例如:在2周内

3 个答案:

答案 0 :(得分:1)

就我可以告诉读取API文档而言,没有时间限制。您可以按setExact设置确切的日期。

Alarm Clock API Reference

答案 1 :(得分: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以上,则可能会遇到问题。

要考虑的另一件事是使用RTCRTC_WAKE_UP设置闹钟,因为这会影响设备是否被闹钟唤醒。

答案 2 :(得分: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)-19,223,372,036,854,775,807,但我假设您不需要等待那么久!