我一直在研究AlarmManager的setRepeating(@AlarmType int type, long triggerAtMillis, long intervalMillis, PendingIntent operation)
方法,并想解决一个用例。
用例是我想用不同的intervalMillis
值设置重复警报。就像我想在2小时,5小时以及第二天的9AM之后显示通知。或者我想在每月的第一个日期做某事。
对此我有两种解决方案。我可以一次设置所有警报,也可以在收到上一个警报时设置下一个警报(以防第二个用例没有任何警报)。问题是,如果错过了触发警报的机会,那么我将无法触发进一步的警报,整个链条都将中断。
如果我错过了它,Android是否提供了任何功能,否则Android是否不应该提供这种灵活性?
答案 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.检查从开始到现在的时间差并执行操作。