#java #android #alarmmanager
#java #Android #alarmmanager
Вопрос:
Странная ситуация, в которой я нахожусь, как и в моем приложении, сразу после того, как я установил время и передал значения часов и минут в качестве аргументов в методе setReminder, всего через несколько секунд появляется уведомление. А не в данный момент времени.
public void setReminder(Context context, long reminderHour, long reminderMinute){
Intent intent =new Intent(context,NotificationBroadcast.class);
Log.d("Reminder Time set :", reminderHour ":" reminderMinute);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,0, intent,0);
Log.d("setReminder", "WORKING");
AlarmManager alarmManager = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
long timeAtButtonClick = System.currentTimeMillis();
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
Calendar datetimetoalarm = Calendar.getInstance(Locale.getDefault());
datetimetoalarm.setTimeInMillis(System.currentTimeMillis());
StudyGoal studyGoal= StudyGoal.getStudyGoalObject();
datetimetoalarm.set(Calendar.HOUR_OF_DAY, (int) reminderHour);
datetimetoalarm.set(Calendar.MINUTE, (int) reminderMinute);
datetimetoalarm.set(Calendar.SECOND, 0);
datetimetoalarm.set(Calendar.MILLISECOND, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, datetimetoalarm.getTimeInMillis(), (1000 * 60 * 60 * 24), pendingIntent);
Log.d("SetReminder:", "WORKING");
Log.d("Reminder Time set :", reminderHour ":" reminderMinute);
}
Комментарии:
1. не могли бы вы также опубликовать текущее время во время тестирования и ваши данные для напоминания о часе и напоминании о минуте
Ответ №1:
Оказывается, при использовании Alarm manager, если установленное время меньше текущего, напоминание сработает немедленно. Чтобы решить эту проблему, вам нужно будет добавить небольшой оператор if, как показано ниже… Он просто добавит день к вашему установленному времени, которое отправит уведомление на следующий день. if(reminderTime.before(Calendar.getInstance())){ reminderTime.add(Calendar.DATE,1); }