Я устанавливаю тревогу с помощью диспетчера тревог для работы в 18:00. Если уже 6 вечера, я хочу, чтобы он запустился на следующий день в 6 часов вечера.
AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
if(calendar.get(Calendar.HOUR_OF_DAY) < 18) {
calendar.set(Calendar.HOUR, 18);
calendar.set(Calendar.MINUTE, 0);
} else {
// Set sync time
calendar.add(Calendar.DATE, 1);
calendar.set(Calendar.HOUR, 18);
calendar.set(Calendar.MINUTE, 0);
}
Intent alarmIntent = new Intent(context, AlarmReceiver.class);
alarmIntent.putExtra("syncmode", "upload");
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
manager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
У меня 6 планшетов Android, на которых установлен один и тот же точный код, и некоторые просыпаются в правильное время, другие запускаются несколько часов спустя. Я проверил часовые пояса, и все совпадает. Документация для AlarmManager говорит, что для установки будильника используется время UTC, но на практике я использую местное время, а те, которые работают, работают в правильное время. Остальные стреляют за 4 часа до времени. Что я делаю не так?
Редактировать: я не могу ответить на свой вопрос, поэтому я установил Calendar.HOUR вместо HOUR_OF_DAY, из-за которого время было установлено неправильно.