Страницы

Поиск по вопросам

четверг, 6 июня 2019 г.

Задать определенное время в AlarmManager

Возникла проблема при вызове Notification в определенное время суток. Notification вызываю при помощи AlarmManager. Когда задаю текущее время (System.currentTimeMillis()), проблем не возникает, все отлично запускается и выводится, но как только пытаюсь задать определенное, то бишь, точное время, ничего не происходит. Что подскажете? Как правильно задать время?
Рабочий вариант:
private void restartNotify(Context context) { alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent notifyIntent = new Intent(context, NotificationMessage.class); contentIntent = PendingIntent.getBroadcast(this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT ); alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), contentIntent); }
Не рабочий:
private void restartNotify(Context context) { alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent notifyIntent = new Intent(context, NotificationMessage.class); contentIntent = PendingIntent.getBroadcast(this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT );
Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR, 15); calendar.set(Calendar.MINUTE, 20); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), contentIntent); }
Решил проблему. Вот реализация:
private void restartNotify(Context context) { alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent notifyIntent = new Intent(context, NotificationMessage.class); contentIntent = PendingIntent.getBroadcast(this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT );
Calendar calendar = Calendar.getInstance(); Calendar cal = Calendar.getInstance();
calendar.set(Calendar.YEAR, cal.get(Calendar.YEAR)); calendar.set(Calendar.MONTH, cal.get(Calendar.MONTH)); calendar.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH)); calendar.set(Calendar.HOUR_OF_DAY, 13); calendar.set(Calendar.MINUTE, 53); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), contentIntent); }
Прошу обратить внимание, кому интересно, что бы все заработало, нужно задать все пункты (год, месяц, день, часы, минуты, секунды, миллисекунды). Важный пункт calendar.set(Calendar.HOUR OF DAY, 13);. Если указать Calendar.HOUR вместо Calendar.HOUR OF DAY то время вместо 24-х часового формата, будет использовать 12-ти часовой, из-за чего время будет считаться указанным не верно (Если у вас на телефоне 24-х часовой формат)


Ответ

А можете проверить какое именно время вы получаете в calendar.getTimeInMillis()? И попробуйте вместо обычного использовать григорианский календарь Calendar calendar = new GregorianCalendar()

Комментариев нет:

Отправить комментарий