2016-09-27 6 views
1

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

У меня есть обычай AlarmManager, в котором я называю график повторения, как это:

CustomAlarmManager alarmManager = new CustomAlarmManager(getActivity()); 
alarmManager.scheduleRepeatingAlarm(getActivity(), 
    alarmID, alarmHour, alarmMinute); 

И для проблемного примера пропускают эти значения:

Id = 619 
Hour = 0 
Minute = 0 

Это setRepeatingAlarm() функция:

public void scheduleRepeatingAlarm(Context context, int alarmID, int hour, int minute) { 
    System.out.println("schedule is running"); 
    Intent intent = new Intent(context, AlarmNotificationReciever.class); 
    Bundle extras = new Bundle(); 
    extras.putBoolean(KEY_REPEAT, true); 
    extras.putInt("AlarmId", alarmID); 
    intent.putExtras(extras); 
    PendingIntent pIntent = PendingIntent.getBroadcast(context, 
     alarmID, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

    Calendar calender = Calendar.getInstance(); 
    calender.set(Calendar.HOUR_OF_DAY, hour); 
    calender.set(Calendar.MINUTE, minute); 

    if (android.os.Build.VERSION.SDK_INT >= 19) { 
     setSingleExactAlarm(calender.getTimeInMillis(), pIntent); 
    } else { 
     mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
      calender.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pIntent); 

    } 
} 

Я предполагаю, что проблема - goin г быть с этими линиями здесь:

Calendar calender = Calendar.getInstance(); 
calender.set(Calendar.HOUR_OF_DAY, hour); 
calender.set(Calendar.MINUTE, minute); 

и эта линия при настройке сигнализации:

setSingleExactAlarm(calender.getTimeInMillis(), pIntent); 

Вечно другой часовой и минутной комбинации, которую он, кажется, работает и рассматривать его как время, чтобы уйти , Но в течение часа = 0 и минуты = 0 он сразу срабатывает.

Заранее за вашу помощь.

+1

Проблема в день. Если вы установите час до 0:00, система будет звонить в тот же день. Вы должны добавить один день для стрельбы на следующий день в 0:00. Он срабатывает напрямую, потому что срабатывает тревога, если прошло заданное время ..... – Opiatefuchs

ответ

3

Это ожидаемое поведение.

Calendar.getInstance() возвращает экземпляр Calendar, установленный на текущую дату/время.

Оставив дату нетронутой и установив часы и минуты на 0, в действительности срабатывает сигнализация (это считается пропущенным аварийным сигналом).

С documentation из setRepeating():

Если заявленное время триггера в прошлом, тревога немедленно, с кол-сигнала тревоги в зависимости от того, насколько далеко в прошлом триггера время относительно интервала повторения.

Вы могли бы сделать что-то вроде этого, чтобы выполнить проверку:

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY, hour); 
calendar.set(Calendar.MINUTE, minute); 

Calendar now = Calendar.getInstance(); 

if(calendar.before(now)) { 
    // handle this as you wish 

    // adding a day to calendar 
    calendar.add(Calendar.DATE, 1); 
}