web-dev-qa-db-fra.com

Définir l'alarme Répéter jours de la semaine dans Android

Quelqu'un peut-il donner une bonne logique pour régler l’alarme des jours de la semaine? J'ai fait l'alarme hebdomadaire en utilisant 

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

L'alarme se déclenche à l'heure et au bout de 7 jours, elle se déclenche automatiquement à cette heure.

Mais mon exigence est que je veux choisir des jours plutôt que 7 jours.

comme tous les lundis, mardis et jeudis à 9h00 - l'alarme devrait se déclencher automatiquement. Comment puis-je faire cela dans setRepeating. 

Quelqu'un peut-il m'aider avec ça?

Merci!

12
TheDevMan

Ces questions parlent de la même chose que vous voulez. Ces réponses seront utiles:

Il vous suffit de spécifier le jour pour le démarrer, puis de le répéter tous les 7 jours. Il y a peu de façons spécifiées dans les réponses aux questions données:

Comment puis-je obtenir l'alerte de répétition pour les jours de la semaine en utilisant le gestionnaire d'alarme?

La notification Android sur un jour de la semaine spécifique disparaît directement

comment répéter le jour de la semaine d'alarme dans Android

Mise à jour:

Dans votre commentaire, vous avez dit 

Comment définir la partie triggerAtMillis dans setRepeating. Par exemple, aujourd'hui, c'est mardi, je choisis chaque lundi, mercredi, vendredi. - Qu'est-ce que je mets pour mercredi?

Ce que j’ai compris, c’est que si aujourd’hui est mardi, comment régler l’alarme pour, disons mercredi, répéter, pas vrai? Tout d'abord, oui, vous pouvez utiliser plusieurs identifiants pour définir les alarmes pour chaque jour séparément. 

Ensuite, vous pouvez ajouter la ligne alarmCalendar.set(Calendar.DAY_OF_WEEK, week); à votre code existant. Basé sur le jour de la semaine (de 1 à 7), il répète pour ce jour. Vous pouvez le transmettre à une fonction en tant que paramètre. Comme:

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

J'ai pris l'exemple d'une des questions ci-dessus. J'espère que c'est plus clair maintenant. 

14
Shobhit Puri
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);
1
VIVEK GAUR

Pour définir une alarme répétée pour les jours de la semaine, utilisez le code ci-dessous. J'espère que c'est utile.

        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);
1
Bhoomika Chauhan
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);
}
1
Makvin