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!
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:
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.
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);
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);
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);
}