Как зарегистрировать AlarmManager для повторения выбранных дней? - PullRequest
1 голос
/ 28 декабря 2011

Я создаю приложение для будильника.

В моем приложении пользователь может выбрать дни для срабатывания будильника, например, воскресенье, понедельник, поэтому я использовал класс Calendar и AlarmManager для регистрации нескольких будильников.

Если выбранный день или дни меньше текущего дня недели, будильник срабатывает немедленно.

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_WEEK, getDayint); //sunday = 1
calendar.set(calendar.HOUR_OF_DAY, gethour);
calendar.set(calendar.MINUTE, getmin);
calendar.set(calendar.SECOND, 0);
calendar.set(calendar.MILLISECOND, 0);

long TIM = calendar.getTimeInMillis();

Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, TIM, sender);

//repeat weekly
am.setRepeating(am.RTC,TIM, AlarmManager.INTERVAL_DAY*7, sender);

1 Ответ

1 голос
/ 28 декабря 2011

Используя PendingIntent.FLAG_UPDATE_CURRENT, вы говорите, что хотите, чтобы у вас был только один такой сигнал тревоги - поэтому последний побеждает - только один сигнал тревоги в неделю. И если TIM лежит в прошлом, сигнализация срабатывает немедленно (и затем повторяется). Пока - все работает, как задумано.

Вы можете проверить, меньше ли значение TIM (кстати, оно переменное, и что они не должны быть прописными, как константы), чем System.currentTimeMillis (), и добавить к нему одну неделю в этом случае

...