Установите Повтор дней недели тревоги в android

Может ли кто-нибудь дать хорошую логику для заданных повторных дней недели тревоги? Я сделал еженедельный сигнал тревоги, используя

            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 дней. В ответах на заданные вопросы указано несколько способов:

Как я могу получить повторный сигнал тревоги для недельных дней с помощью диспетчера аварийных сигналов?

Уведомление Android в определенный будний день сразу отключается

как повторить день недели тревоги в андроиде

Update:

В своем комментарии вы сказали

Как установить часть triggerAtMillis в setRepeating. например, сегодня - вторник, я выбираю еженедельный понедельник, среду, пятницу. - Что я ставлю на среду?

Что я понял, что, если сегодня вторник, как настроить будильник, можно сказать, что среда повторяется, не так ли? Прежде всего, вы можете использовать mulltiple id для установки аварийных сигналов для каждого дня отдельно.

Затем вы можете добавить строку alarmCalendar.set(Calendar.DAY_OF_WEEK, week); к существующему коду. На основе недельного дня (с 1-7) он повторяется на этот день. Вы можете передать его в функцию как параметр. Как:

    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

Intent intent1 = new Intent(getApplicationContext(),
                            NotificationReceiver.class);
PendingIntent pendingIntent1 = PendingIntent.getBroadcast(getApplicationContext(),
                                                          1,
                                                          intent1,
                                                          PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager1 = (AlarmManager)getSystemService(ALARM_SERVICE);
java.util.Calendar calendar1 = java.util.Calendar.getInstance();

calendar1.set(java.util.Calendar.DAY_OF_WEEK,
              Calendar.MONDAY);
calendar1.set(java.util.Calendar.HOUR_OF_DAY,
              22);
calendar1.set(java.util.Calendar.MINUTE,
              8);
calendar1.set(java.util.Calendar.SECOND,
              0);

alarmManager1.setExact(AlarmManager.RTC, calendar1.getTimeInMillis(), pendingIntent1);

Ответ 3

if (Monday.isChecked()) {
                        setalarm(2);
                    } else if (Tuesday.isChecked()) {
                        setalarm(3);
                    } else if (Wednesday.isChecked()) {
                        setalarm(4);
                    } else if (Thursday.isChecked()) {
                        setalarm(5);
                    } else if (Friday.isChecked()) {
                        setalarm(6);
                    } else if (Saturday.isChecked()) {
                        setalarm(7);
                    } else if (Sunday.isChecked()) {
                        setalarm(1);
                    }

public void setalarm(int weekno) {

        cal.set(Calendar.DAY_OF_WEEK, weekno);
        cal.set(Calendar.MINUTE, min);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);

        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,


     cal.getTimeInMillis(), 1 * 60 * 60 * 1000, pendingIntent);
}