如何使用AlarmManager将闹钟设置为每月的第一个星期四

时间:2013-12-07 12:37:35

标签: 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_IN_MONTH, 1); // Thursday

由于

修改

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();

    }

2 个答案:

答案 0 :(得分:1)

由于setRepeating()不再与Android 4.4相同,因此最佳解决方案是使用setExact()(在Android 4.4上)或set()(在Android 4.3及更低版本上) 。设置下个月第一个星期四的闹钟事件。作为处理该事件的一部分,请为下个月的第一个星期四设置警报。等等。

答案 1 :(得分:0)

你可以查看这篇文章

How to implement yearly and monthly repeating alarms?

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