Установить повторную тревогу в определенное время каждый день - PullRequest
4 голосов
/ 29 октября 2011

Я пытаюсь использовать диспетчер тревог для запуска будильника в определенное время каждый день.Я использую этот код

Intent intent = new Intent(AlarmSettings.this, AlarmService.class);
                        intent.putExtra("i", i);
PendingIntent mAlarmSender = PendingIntent.getService(AlarmSettings.this, Id, intent, 0);

AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);

am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),Calendar.getInstance().getTimeInMillis()+(24*60*60*1000), mAlarmSender);}

проблема была в том, что если значение cal.getTimeInMillis () было в прошлом, срабатывает будильник сразу, я не знаю, почему и когда значение cal.getTimeInMillis ()будущее, в котором оно работает правильно в свое время.

Мне нужно, чтобы оно работало в определенное время каждый день.

Ответы [ 3 ]

7 голосов
/ 23 сентября 2014
// every day at 9 am
Calendar calendar = Calendar.getInstance();

// if it's after or equal 9 am schedule for next day
if (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) >= 9) {
    calendar.add(Calendar.DAY_OF_YEAR, 1); // add, not set!
}
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY, pi);

// alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(),
// AlarmManager.INTERVAL_DAY, pi);
2 голосов
/ 29 октября 2011

Похоже, ваш вызов

setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)

Попробуйте установить правильный triggerAtTime (в будущем) - как

Calendar.getInstance().getTimeInMillis()+(24*60*60*1000)

Третий параметр (интервал), очевидно, должен быть вашим интерваломвроде

24*60*60*1000
0 голосов
/ 28 апреля 2017

Это мне очень помогло, у меня был случай, когда я тоже использовал минуты и предложил следующую небольшую поправку:

/* Create calendar and set desired time before this*/

// Compare the current time milliseconds with the desired calendar time milliseconds
if (java.util.Calendar.getInstance().getTimeInMillis() >= 
            calendar.getTimeInMillis() ) {
    calendar.add(Calendar.DAY_OF_YEAR, 1);
}
...