首页 > 解决方案 > 在AlarmManager中重复警报中的不同间隔时间

问题描述

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

用例是我想设置具有不同intervalMillis值的重复警报。就像我想在 2 小时、5 小时和第二天早上 9 点之后显示通知一样。或者我想在每个月的第一个日期做一些事情。

我有两个解决方案。要么我一次设置所有警报,要么在收到上一个警报时设置下一个警报(如果没有警报更像第二个用例)。问题是如果错过了触发警报,我将无法触发进一步的警报,整个链条都会中断。

如果我错过了 Android 是否为此提供了任何东西,或者 Android 不应该提供这种灵活性?

标签: androidalarmmanageralarm

解决方案


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

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

示例:
您想安排PendingIntent在下午 5 点、晚上 8 点和第二天上午 10 点触发的警报。假设您决定使用setRepeating()代替设置警报 3 次setExactAndAllowWhileIdle()。您必须做的是将这 3 个指定时间及其日历日传入数据库,将间隔设置为每 3 小时触发一次,每次警报触发时,它必须检查数据库是否是触发警报的时间。在这种行为中,您将产生更多的唤醒锁(每 3 小时产生一次),但您将确保您的警报将被触发。

可能我描述的不是很清楚,但希望你能理解。我还将提供一些链接,其中我描述了如何设置这些警报以及如何AlarmManagers看到PendingIntents。:

安排每 24 小时运行一次的任务


推荐阅读