在Android sdk alarm manager中的选定日期重复计划任务

在Android sdk alarm manager中的选定日期重复计划任务,android,sdk,calendar,alarmmanager,Android,Sdk,Calendar,Alarmmanager,我试着在不打扰专家的情况下做到这一点,并在这里和其他网站上阅读了许多帖子。很明显,我的大脑不明白需要做些什么才能让它起作用 我的目标是,该应用程序允许用户输入一个时间和一周中的一天或几天。所有的GUI端和存储的日期和时间,我已经做了,但要让报警管理器重复,让我们说,每周一在14:00,然后可以发送在14:02。我使用了java Calendar对象来保存一周中的时间和日期,甚至使用了一个月中一周中的日期和日期。然后,根据需要将其转换为毫秒,以便报警管理器读入 然后,我使用alarm manage

我试着在不打扰专家的情况下做到这一点,并在这里和其他网站上阅读了许多帖子。很明显,我的大脑不明白需要做些什么才能让它起作用

我的目标是,该应用程序允许用户输入一个时间和一周中的一天或几天。所有的GUI端和存储的日期和时间,我已经做了,但要让报警管理器重复,让我们说,每周一在14:00,然后可以发送在14:02。我使用了java Calendar对象来保存一周中的时间和日期,甚至使用了一个月中一周中的日期和日期。然后,根据需要将其转换为毫秒,以便报警管理器读入

然后,我使用alarm manager set或set repeat方法来重复事件。我所能做的就是让它发生一次,然后如果我将模拟器的日期和时间更改为另一个星期一,什么也不会发生

GUI将小时和分钟保存在所需的变量中,然后将其用于日历对象

报警管理器调用广播接收器以使事件发生

请某人简单地给出一个关于如何设置特定日期的示例,例如周一、周三和周五。我知道每天都需要单独的报警管理器,目前我只把周一作为主要测试

浏览的链接:


现在我终于找到了答案,所以我的答案如下:

下面的代码计算从现在到计划任务所需日期之间的剩余天数。此代码所属的方法通过参数传递的变量。在理解这一点时,Day代表一周中的第1天到第7天,其中1是星期天,2是星期一,依此类推

//This gets the current day of the week as of TODAY / NOW
int checkcurrentday = getcurtime.get(Calendar.DAY_OF_WEEK);

// This calculates the days between now and the day needed which is represented by whichday.
int numberofdays = Calendar.SATURDAY + whichday - checkcurrentday;

//Now add NOT set the difference of the days to your Calendar object
tMondayOn.add(Calendar.DATE, numberofdays);

那么,您需要首先使用Java日历API(或Joda!)来确定下周一是什么时候。将报警设置为该时间(以毫秒为单位),然后使用setRepeating并传入表示一周间隔的long

LuxuryMode-感谢您的回复,您知道在发布了这个问题后,我的大脑开始怀疑报警管理器中的参数以及间隔部分是如何工作的。然后我想知道是否有通过Alarm Manager每周一次的间隔选项。我想,像往常一样,我一直在让事情变得更难:)我会试试你的建议。谢谢你在这方面花时间。我是否应该使用Alarm Manager中的天间隔,然后按7向前移动一周?对,当我使用AlarmManager时,这似乎是可行的。间隔天*7但当我进入一个新的月份并选择星期一,但确保时间未设置为事件发生的时间时,我注意到两个广播接收器立即被触发,那么,如果我将时间设置为第一次启动的时间,它会工作,第二次启动时也会工作,有什么原因它会像这样启动两个广播接收器吗?@TimCS,请帮自己一个忙,并在使用它进行报警管理时记录一个格式化的日期。我已经广泛地处理了警报,并了解到,你确实需要首先确认你得到了你认为是的日期。警报立即响起的最常见原因是date对象实际上代表一个已经过去的时间,在这种情况下它会立即响起。LuxuryMode,我想你的意思是让我在屏幕上显示日期和时间,以便我知道它是正确的?此外,只有当我进入新的一个月时,事件才会在第一次设置的指定时间之前触发。不过,如果我理解你的意思,我会按照你的建议做,并在屏幕上显示日期和时间。我使用的是每月的日历日(我不得不猜测这里的名称,因为我面前没有它),并将其设置为2作为星期一,这样是否正确?LuxuryMode-我决定将两个日历对象的时间和日期输出到屏幕。在设置要重新发生事件的日期之前,我已经将emulator设置回了14,然后设置了开启和关闭时间。它确实显示了当天是11月14日(星期一),然后正确地显示了时间。是因为它举行了14日,当我进入下周一时,它会立即重新触发事件吗?如果是这样的话,为什么它能在下周一的指定时间正确触发事件?也许是间隔时间?