触发警报中待处理意图的请求代码的唯一性

时间:2017-12-07 10:25:03

标签: java android alarmmanager alarm

我有一个 hashmap (日期,整数),其中日期表示我应该触发警报的时间,整数表示如何很多天我应该重复警报。

在这里,为了使用android报警管理器设置多个报警,据说我应该设置具有唯一请求代码的待定意图。

我的问题是说例如:

My hashmap values-
9:00 AM - 4 days
3:00 PM - 7 days

据我所知,我应该设置总计(4 + 7 =)11个未决意图。 现在为了设置这些警报,我应该有11个唯一的请求代码..如果有大量的警报和日期数增加,有很多待定的意图设置,其中唯一性是一个问号!

我们应该生成独特的解决方案还是我们有最好的解决方案?

我正在学习这个概念,如果我错了,请纠正我。

提前致谢!

1 个答案:

答案 0 :(得分:0)

让我们举个例子,我们有两件事要安排

  • 一次性闹铃
  • 接下来5天的警报

您需要的是两个PendingIntent,每个一个。

一次性的事情很清楚,我想,你使用AlarmManager#set()并提供一个PendingIntent唯一ID。

另一个,您将需要使用AlarmManager#setRepeating()并将间隔传递为(一天中的毫秒),假设您希望警报每天在同一时间,并且这个将是另一个唯一的ID

您最终只需要2个唯一ID。

对于定期活动,您需要一个ID,每次重复都不需要ID。

这是诀窍,我不知道一个API,它允许您限制repeating闹钟的天数。因此,基本上只要你的PendingIntent触发,你需要检查这是否应该被触发的最后一天,如果是,你可以使用AlarmManager#cancel()来执行此操作。

想到的第一个想法是计算该事件的结束时间,如果你在那个时间过去了,那么每当意图发生时都要检查。

代码示例:

PendingIntent alarmIntent = PendingIntent.getBroadcast(getApplicationContext(),uniqueid, intent, PendingIntent.FLAG_UPDATE_CURRENT)
long alarmTimeInMillis = ..; // your own value here
long oneDayInterval = 1000 * 60 * 60 * 24; // 24 hours in millis
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, alarmTimeInMillis,
        oneDayInterval, alarmIntent);

另请参阅documentation,以确定哪种方法最符合您的要求。