在安卓中设置重复星期数闹钟

2022-09-02 12:43:49

有人能给出设置重复的星期数警报的良好逻辑吗?我通过使用

alarmCalendar.set(Calendar.HOUR, AlarmHrsInInt);
alarmCalendar.set(Calendar.MINUTE, AlarmMinsInInt);
alarmCalendar.set(Calendar.SECOND, 0);
alarmCalendar.set(Calendar.AM_PM, amorpm);

Long alarmTime = alarmCalendar.getTimeInMillis();

Intent intent = new Intent(Alarm.this, AlarmReciever.class);
intent.putExtra("keyValue", key);
PendingIntent pi = PendingIntent.getBroadcast(Alarm.this, key, intent, PendingIntent.FLAG_UPDATE_CURRENT);
am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime, 7*1440*60000 , pi); 

警报按时触发,7天后自动触发。

但我的要求是我想选择天数,而不仅仅是7天。

例如每周一,周二,周四上午9:00 - 警报应自动触发。如何在 setRepeating 中执行此操作?

有人可以帮我解决这个问题吗?

谢谢!


答案 1

这些问题谈论的是您想要的相同内容。这些答案将很有帮助:

您只需要指定开始的日期,然后每7天重复一次。在给定问题的答案中指定了几种方法:

如何使用警报管理器获取工作日的重复警报?

特定工作日的安卓通知直接关闭

如何在安卓中重复闹钟工作日

更新:

在你的评论中你说

如何在 setRepeating 中设置触发器 AtMillis 部分。例如,今天是星期二,我选择每周星期一,星期三,星期五。- 我周三要放什么?

我明白了,如果今天是星期二,如何设置闹钟让我们说星期三重复,对吧?首先,是的,您可以使用mulltiple id单独设置每天的闹钟。

然后,您可以向现有代码中添加行。根据工作日(从1-7)开始,它重复那一天。您可以将其作为参数传递到函数中。喜欢:alarmCalendar.set(Calendar.DAY_OF_WEEK, week);

    setAlarm(2); //set the alarm for this day of the week

    public void setAlarm(int dayOfWeek) {
        // Add this day of the week line to your existing code
        alarmCalendar.set(Calendar.DAY_OF_WEEK, dayOfWeek);

        alarmCalendar.set(Calendar.HOUR, AlarmHrsInInt);
        alarmCalendar.set(Calendar.MINUTE, AlarmMinsInInt);
        alarmCalendar.set(Calendar.SECOND, 0);
        alarmCalendar.set(Calendar.AM_PM, amorpm);

        Long alarmTime = alarmCalendar.getTimeInMillis();
        //Also change the time to 24 hours.
        am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime, 24 * 60 * 60 * 1000 , pi); 
}

我从上面的一个问题中举了一个例子。希望它现在更清晰。


答案 2

要为工作日设置重复闹钟,请使用以下代码。希望这是有帮助的。

        Calendar calender= Calendar.getInstance();

        calender.set(Calendar.DAY_OF_WEEK, weekNo);  //here pass week number
        calender.set(Calendar.HOUR_OF_DAY, hour);  //pass hour which you have select
        calender.set(Calendar.MINUTE, min);  //pass min which you have select
        calender.set(Calendar.SECOND, 0);
        calender.set(Calendar.MILLISECOND, 0);

        Calendar now = Calendar.getInstance();
        now.set(Calendar.SECOND, 0);
        now.set(Calendar.MILLISECOND, 0);

        if (calender.before(now)) {    //this condition is used for future reminder that means your reminder not fire for past time
            calender.add(Calendar.DATE, 7);
        }

        final int _id = (int) System.currentTimeMillis();  //this id is used to set multiple alarms

        Intent intent = new Intent(activity, YourServiceClass.class);

        PendingIntent pendingIntent = PendingIntent.getBroadcast(activity, _id, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calender.getTimeInMillis(), 7 * 24 * 60 * 60 * 1000, pendingIntent);

推荐