AlarmManager start Alarm Мгновенно


-1

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

Проблема заключается в том, что как только я нажимаю на кнопку CreateRemainder, Сигнализация срабатывает

Я использую следующий метод для передачи даты, значения времени для AlarmManager класса.

int year= Integer.parseInt(splitDate[0]); 
int month= Integer.parseInt(splitDate[1]); 
int day= Integer.parseInt(splitDate[2]); 

int hour= Integer.parseInt(splitTime[0]); 
int minute= Integer.parseInt(splitTime[1]); 
int second= 0; 


Calendar cal = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault()); 
cal.set(Calendar.DATE,day); //1-31 
cal.set(Calendar.MONTH,month-1); //first month is 0!!! January is zero!!! 
cal.set(Calendar.YEAR,year);//year... 

cal.set(Calendar.HOUR_OF_DAY, hour); //HOUR 
cal.set(Calendar.MINUTE, minute);  //MIN 
cal.set(Calendar.SECOND, second); 

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent); 

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

alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (10 * 1000), pendingIntent); 

Но если я добавлю 10 секунд в календарь, он все равно начнет отображать сигнал тревоги сразу после его установки.

alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis()+10000, pendingIntent); 
  0

Вместо 'System time' получить' будильник manger'. 25 июл. 162016-07-25 13:00:14

  0

@ Kirmani88 .. Я видел, что вы приняли мой ответ ... Не могли бы вы прокомментировать мой ответ и рассказать нам, как вы исправили? Для будущей справки ... 25 июл. 162016-07-25 14:10:37

1

Обычно, если сигнал увольняют, как только вы установите его, то это означает, что запланированное время отстает от текущего времени ... Так что, AlarmManager пожаров это imediatelly

Я предлагаю, чтобы добавить отладочные сообщения для отладки. Что-то вроде:

Log.d("DEBUG", "Time from device: " + Calendar.getInstance().getTimeInMillis() + " Time passed to alarm: " + cal.getTimeInMillis()); 

Затем вы можете проверить Current Millis сайт и проверить, если оба раза правильно .. Проверьте, если кал действительно будушее

Кроме того, если вы хотите добавить время к календарь, используйте следующим образом: Calendar.add() метод:

Calendar cal = Calendar.getInstance(); 

cal.add(Calendar.SECOND, 10); 

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent); 
  0

Основная проблема была в месяце, я вычитал -1 из месяца, поэтому он запускает Alarm сразу после его добавления , потому что это был месяц. 25 июл. 162016-07-25 14:17:55


1

Используйте это:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
     alarmManager.setExact(AlarmManager.RTC, cal.getTimeInMillis(), pendingIntent); 
    } else { 
     alarmManager.set(AlarmManager.RTC, cal.getTimeInMillis(), pendingIntent); 
    } 

Если сигнал тревоги вызывался мгновенно, чем моя догадка дата ваших cal «S является до сегодняшнего дня.

  0

Спасибо, так как я читал где-то, что 'firstMonth' равно 0, поэтому я вычитаю -1 из того, что я получаю, хорошо или мне нужно поставить тот же месяц в календаре. 25 июл. 162016-07-25 13:06:01

  0

Возможно, вы не получаете свои даты прямо из 'splitDate', но код вашей тревоги выглядит просто отлично 25 июл. 162016-07-25 13:07:21