Activity
,其中有两个选项(例如小睡)。我已经完成了所有这些工作,但我遇到了问题
AlarmManager
来处理我的警报需求。然而,课堂上有一些奇怪的事情(在我看来)。有两种建议的方法来处理闹钟时间的设置。即setInexactRepeating
和setRepeating
。这些功能的问题是:
setInexactRepeating
不是很准确。我的测试表明,这在指定时间大致激活,文档指出,所有这些都是相当模糊的;
在此时间之前警报不会触发,但在第一次调用警报之前可能会有几乎整个警报间隔的延迟。
我的测试显示通常有5分钟的延迟。在this answer,用户平均延迟大约12分钟。当然,对于一个应该在指定时间唤醒人们的系统,这是行不通的
setRepeating
会在指定时间触发。然而,文档指出,从API 19开始,所有重复警报都是不精确的。这正是我不想要的。
从API 19开始,所有重复警报都不准确。由于此方法自API 3开始提供,因此您的应用程序可以安全地调用它,并确保它将在当前和旧版本的Android上获得类似的行为。
有setExact
方法,但这有点过于具体。除此之外,它没有让我选择有一定的间隔(每天重复警报)。 编辑:在尝试使用setExact
后,我发现这需要我升级到API 19(目前在15),这是我想避免的。
答案 0 :(得分:3)
您可以在API 19之前和API 19之后分开。第一次设置闹钟时:
if (Build.VERSION.SDK_INT >= 19) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), mondayIntent);
} else {
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY * 7, mondayIntent);
}
当你发现警报时:
if (Build.VERSION.SDK_INT >= 19) {
rescheduleAlarm();
}
您必须使用
设置闹钟setexact
再次在rescheduleAlarm。
希望这有帮助。