Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用AlarmManager将报警设置为每月的第一个星期四_Java_Android_Alarmmanager_Android Notifications_Android Alarms - Fatal编程技术网

Java 如何使用AlarmManager将报警设置为每月的第一个星期四

Java 如何使用AlarmManager将报警设置为每月的第一个星期四,java,android,alarmmanager,android-notifications,android-alarms,Java,Android,Alarmmanager,Android Notifications,Android Alarms,我试图在每个月的第一个星期四发出警报通知 am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),AlarmManager.INTERVAL_DAY*30, sender); 我不能使用上面的代码,因为不是每个月都有30天,有没有办法做到这一点 这是否表示每个月的第一个星期四 cal.set(Calendar.DAY_OF_WEEK, 5); // Thursday cal.set(Calendar.DAY_OF_WEEK

我试图在每个月的第一个星期四发出警报通知

 am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),AlarmManager.INTERVAL_DAY*30, sender);
我不能使用上面的代码,因为不是每个月都有30天,有没有办法做到这一点

这是否表示每个月的第一个星期四

cal.set(Calendar.DAY_OF_WEEK, 5); // Thursday
cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, 1); // Thursday
谢谢

编辑


由于从Android 4.4开始,
setRepeating()
不再精确,因此最好的解决方案是使用
setExact()
(在Android 4.4上)或
set()
(在Android 4.3及以下版本上)。为下个月的第一个星期四设置警报事件。作为处理该事件的一部分,为下个月的第一个星期四设置警报。诸如此类。

由于自Android 4.4起,
setRepeating()
不再精确,因此最好的解决方案是使用
setExact()
(在Android 4.4上)或
set()
(在Android 4.3及以下版本上)。为下个月的第一个星期四设置警报事件。作为处理该事件的一部分,为下个月的第一个星期四设置警报。等等。

你可以看看这篇文章


如果您至少在版本19上使用alarmmanager,您可以看看setWindow()

您可以看看这篇文章


如果您至少在版本19上使用alarmmanager,您可以查看setWindow()

谢谢,但我不太明白您的意思,您能更好地解释一下吗?为下个月的第一个星期四设置一个报警事件。作为处理该事件的一部分,为下个月的第一个星期四设置警报。@OluleyeIResþektIdowu:我不知道如何更好地解释它。为自己编写一个
scheduleaneventforthefirsthursdayofnextmonth()
方法。调用一次以设置第一个事件。触发该事件后,调用scheduleAntentFortheFirstHurstDayofNextMonth()设置下一个事件。请记住,您还需要在重新启动后调用
scheduleanetforthefirsthursdayofnextmonth()
,可能是从
启动完成后的
广播接收器
。谢谢,我有点明白您的意思,如果您能帮我检查一下这个问题,我将非常高兴,它与此相关,您的id似乎出现在与此类问题相关的搜索中。非常感谢。我很感激你的意见-请你检查一下我的编辑,我不确定我的方法是否正确,有些东西告诉我它显示的是一个月的第一个星期四,而不是你指出的下个月的第一个星期四。如果您能检查并进行更改,我将非常高兴。谢谢,很好Morning@OluleyeIResþektIdowu:“有些东西告诉我它显示的是一个月的第一个星期四,而不是你所指的下个月的第一个星期四”——每当创建这样一个
日历
对象时,使用
set()
在日期的特定部分输入值,你总是有在过去创建日期的风险。通常,我会遇到这样的情况,人们试图在一天中设置一个特定的时间,因此检查日期是否在过去,如果是,则添加一天。你也可以尝试同样的方法,但是如果日期是过去的话,可以增加一个月而不是一天。谢谢,但是我不太明白你的意思,你能解释得更好吗?为下个月的第一个星期四设置一个警报事件。作为处理该事件的一部分,为下个月的第一个星期四设置警报。@OluleyeIResþektIdowu:我不知道如何更好地解释它。为自己编写一个
scheduleaneventforthefirsthursdayofnextmonth()
方法。调用一次以设置第一个事件。触发该事件后,调用scheduleAntentFortheFirstHurstDayofNextMonth()
设置下一个事件。请记住,您还需要在重新启动后调用
scheduleanetforthefirsthursdayofnextmonth()
,可能是从
启动完成后的
广播接收器
。谢谢,我有点明白您的意思,如果您能帮我检查一下这个问题,我将非常高兴,它与此相关,您的id似乎出现在与此类问题相关的搜索中。非常感谢。我很感激你的意见-请你检查一下我的编辑,我不确定我的方法是否正确,有些东西告诉我它显示的是一个月的第一个星期四,而不是你指出的下个月的第一个星期四。如果您能检查并进行更改,我将非常高兴。谢谢,很好Morning@OluleyeIResþektIdowu:“有些东西告诉我它显示的是一个月的第一个星期四,而不是你所指的下个月的第一个星期四”——每当创建这样一个
日历
对象时,使用
set()
在日期的特定部分输入值,你总是有在过去创建日期的风险。通常,我会遇到这样的情况,人们试图在一天中设置一个特定的时间,因此检查日期是否在过去,如果是,则添加一天。你也可以尝试同样的方法,但是如果日期是过去的话,可以增加一个月而不是一天。
private void createThursayScheduledNotification() {
        Calendar calendar3 = Calendar.getInstance();
        calendar3.set(Calendar.DAY_OF_WEEK, 5); // Thursday
        calendar3.set(Calendar.DAY_OF_WEEK_IN_MONTH, 1); // First Thursday of
                                                            // Each Month
        // Thursday
        calendar3.set(Calendar.HOUR_OF_DAY, 9);
        calendar3.set(Calendar.MINUTE, 0);
        calendar3.set(Calendar.SECOND, 0);
        calendar3.set(Calendar.AM_PM, Calendar.AM);
        AlarmManager alarmMgr = (AlarmManager) getSystemService(ALARM_SERVICE);
        alarmMgr.set(AlarmManager.RTC_WAKEUP,
                calendar3.getTimeInMillis(), pendingIntent3); // every first Thursday
        createThursayScheduledNotification();

    }