У меня есть приложение, которое устанавливает аварийные сигналы в определенное время, указанное в TimePicker (24-часовой режим).Android AlarmManager устанавливает будильник на следующий день
Я заметил, что если это время, например. 23:00, и вы установите будильник на 01:00, AlarmManager интерпретирует это как уже прошедшую дату. В настоящее время я поставил мои тревоги, как следующее:
private void setUpAlarm(int hour, int minute){
long timeInMs = 0;
long currentTimeInMs = 0;
long timeDifference = 0;
// Set up a calendar to calculate when the alarm should go off
Calendar customCalendar = new GregorianCalendar();
customCalendar.set(Calendar.HOUR_OF_DAY, hour);
customCalendar.set(Calendar.MINUTE, minute);
customCalendar.set(Calendar.SECOND, 0);
customCalendar.set(Calendar.MILLISECOND, 0);
Date customDate = customCalendar.getTime();
timeInMs = customDate.getTime();
currentTimeInMs = System.currentTimeMillis();
timeDifference = timeInMs - currentTimeInMs;
/*
* If the user has entered a date that has passed (time difference is negative)
* add 24 hours to the alarm time.
*/
if(timeDifference < 0){
timeInMs += 86400000;
}
//set the alarm
Intent intent = new Intent(this, AlarmClockRingRing.class);
action = PendingIntent.getActivity(this, (int)timeInMs,
intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, timeInMs, action);
Toast.makeText(this, "One shot alarm set at " + alarmTime, Toast.LENGTH_LONG).show();
}
Как вы можете видеть приложение вычислить разницу во времени, и если он отрицательный он устанавливает сигнал на следующий день. Это создает ошибку, описанную выше. Как это исправить?
С уважением,
Маркус