在AlarmManager中重复警报中更改间隔时间

时间:2018-10-18 14:37:05

标签: android alarmmanager alarm

我一直在研究AlarmManager的setRepeating(@AlarmType int type, long triggerAtMillis, long intervalMillis, PendingIntent operation)方法,并想解决一个用例。

用例是我想用不同的intervalMillis值设置重复警报。就像我想在2小时,5小时以及第二天的9AM之后显示通知。或者我想在每月的第一个日期做某事。

对此我有两种解决方案。我可以一次设置所有警报,也可以在收到上一个警报时设置下一个警报(以防第二个用例没有任何警报)。问题是,如果错过了触发警报的机会,那么我将无法触发进一步的警报,整个链条都将中断。

如果我错过了它,Android是否提供了任何功能,否则Android是否不应该提供这种灵活性?

2 个答案:

答案 0 :(得分:1)

有很多方法可以实现这一目标。无论如何,他们都需要一个共同的东西-数据库。显然很容易理解,您需要数据库来存储如下信息:
-闹钟有效(例如,或应关闭,例如在“时钟”应用中)
-应该何时触发(例如,您重新启动设备并通过
启动服务  onBootReceived,它需要检查是否必须安排新警报)

现在略谈PendingIntent
如果您使用相同的PendingIntent安排警报-我的意思是,意图,传入的数据,请求代码和操作是相同的,则设置新警报后的每个旧警报都将被覆盖并取消。为避免这种情况,您必须将uri传递给您创建的每个警报。您可以简单地从数据库中提取Uri

示例:
您想安排一个警报,该警报将在下午5点,晚上8点以及第二天的上午10点触发PendingIntent。假设您决定使用setRepeating(),而不是使用setExactAndAllowWhileIdle()设置3次警报。您必须做的是将这3个指定时间及其指定的日历天传递给数据库,将间隔设置为每3小时触发一次,并且每次触发警报时,都必须在数据库中检查是否是触发警报的时间。在这种情况下,您将产生更多的唤醒锁(每3小时一次),但可以确保会触发警报。

也许我没有很清楚地描述它,但是我希望你能理解。我还将提供一些链接,这些链接描述了如何设置这些警报以及AlarmManagers如何看到PendingIntent

Scheduling a task to run every 24 hours
Editing scheduled pending intends

答案 1 :(得分:0)

使用JobService

1。每15分钟一定触发一次。测试并在我们的应用程序之一中使用它。 2.存储JobService的首次启动时间。 3.检查从开始到现在的时间差并执行操作。