我想知道将来我们可以通过AlarmManager
安排通知的时间有限吗?
我知道这听起来很奇怪,但我想知道是否存在某种时间限制,例如:在2周内
答案 0 :(得分:1)
就我可以告诉读取API文档而言,没有时间限制。您可以按setExact
设置确切的日期。
答案 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以上,则可能会遇到问题。
要考虑的另一件事是使用RTC或RTC_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)-1
或9,223,372,036,854,775,807
,但我假设您不需要等待那么久!