4 votes

Comment régler l'heure de l'alarme pour le lendemain dans l'application Android ?

Je suis en train de créer une application Android, et j'ai un problème (je suis nouveau dans le développement Android).

Dans mon application, je veux définir une alarme pour aujourd'hui. Cela fonctionne, mais mon problème est que lorsque je veux définir l'heure du sélecteur de temps comme inférieure à l'heure actuelle, mon alarme sonne immédiatement. Je veux définir cette heure pour l'heure de demain. Comment dois-je faire ?

17voto

Chris Noldus Points 2282

Il suffit de vérifier les résultats du sélecteur de temps avant de régler l'alarme. Je ne sais pas exactement comment vous réglez votre alarme, ni même quel type d'alarme vous utilisez, mais je suppose qu'avec un temps en millisecondes, vous pouvez le calculer.

public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
    Calendar now = Calendar.getInstance();
    Calendar alarm = Calendar.getInstance();
    alarm.set(Calendar.HOUR_OF_DAY, hourOfDay);
    alarm.set(Calendar.MINUTE, minute);
    long alarmMillis = alarm.getTimeInMillis();
    if (alarm.before(now)) alarmMillis+= 86400000L;  //Add 1 day if time selected before now
    setAlarm(alarmMillis);
}

public void setAlarm(long millis) { 
    /** Set your alarm here */
}

Il y a beaucoup d'autres façons de faire cela, mais je trouve que la classe Calendrier est généralement bonne pour la manipulation du temps pour les débutants. J'espère que cela vous aidera.

EDIT : Si l'heure d'été est un problème, une petite modification résoudra le problème :

public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
    Calendar now = Calendar.getInstance();
    Calendar alarm = Calendar.getInstance();
    alarm.set(Calendar.HOUR_OF_DAY, hourOfDay);
    alarm.set(Calendar.MINUTE, minute);
    if (alarm.before(now)) alarm.add(Calendar.DAY_OF_MONTH, 1);  //Add 1 day if time selected before now
    setAlarm(alarm.getTimeInMillis());
}

Vous devez vous assurer que le fuseau horaire est correctement défini. Le code ci-dessus utilisera le fuseau horaire par défaut qui est défini par le système en fonction des paramètres de votre localité Android. Utilisez Calendar.getInstance(TimeZone zone) pour obtenir l'objet Calendrier dans un fuseau horaire spécifique.

0voto

user3180701 Points 11

Voici le code que j'ai utilisé dans mon projet. Je récupère l'instance du calendrier, puis je fixe l'heure requise et je la compare à la valeur de l'heure réelle, si elle est inférieure à zéro (passée), j'ajoute un jour. J'espère que cela vous aidera.

Calendar c = Calendar.getInstance();
    c.set(Calendar.HOUR_OF_DAY, hour);
    c.set(Calendar.MINUTE, minute);
    c.set(Calendar.SECOND, second);
    long timeInMillis = c.getTimeInMillis();
    if(timeInMillis-System.currentTimeMillis()<0){
        //if its in past, add one day
        timeInMillis += 86400000;
    }
    //for instance start repeating intent
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, timeInMillis, AlarmManager.INTERVAL_DAY, pendingIntent);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X