Alarmmanager

Рейтинг: 0Ответов: 1Опубликовано: 17.02.2015

Я регистрирую alarmmanager на 14 часов ежедневно, и если он будет повторно регистрировать, то просто обновит, а не добавит еще один alarm, но почему-то alarmManager отрабатывает каждый раз при запуске этого метода, в BootReceiver поступает запрос сразу же после запуска этого метода в любое время.

public void notifyEveryDay(int hour){
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, 14);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, BootReceiver.class);
    intent.setAction(notifyEveryDay);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    am.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis() ,AlarmManager.INTERVAL_DAY, pendingIntent);
}

Ответы

▲ 2Принят

Надо проверять (перед назначением времени календарю), прошло ли уже указанное время.

Т.е. назначаем календарю час, сравниваем кол-во миллисекунд в полученном календаре с текущим кол-вом миллисекунд, и если заданное время меньше, то прибавляем к нашему календарю 1 день. После этого назначаем календарь AlarmManager-у.