установить повторяющиеся сигналы в пределах диапазона и перезапустить сигналы без вмешательства пользователя - PullRequest
0 голосов
/ 13 апреля 2019

Я создаю приложение для напоминания о питьевой воде (я уже искал и пробовал, но не вижу решения), идея состоит в том, чтобы пользователь ввел время начала, интервал и время окончания.Почти все работает нормально, но когда достигается конечное время, будильник не устанавливается на следующий день, и он начинает звучать каждую минуту или около того.

В основном я хочу добиться того, чтобы, если время окончаниясигнал тревоги поступил, он будет установлен на следующий день без вмешательства пользователя.

Я уже пробовал с методами Calendar.before () и Calendar.after (), но я не вижу результатов.

Calendar now = Calendar.getInstance();

// cancel already scheduled reminders
cancelWaterReminder(context);

Calendar calendarEndTime = Calendar.getInstance();
calendarEndTime.set(Calendar.HOUR, userPrefs.getWaterReminder_toHour());
calendarEndTime.set(Calendar.MINUTE, userPrefs.getWaterReminder_toMin());
calendarEndTime.set(Calendar.SECOND, 0);

Calendar calendarStartTime = Calendar.getInstance();
calendarStartTime.set(Calendar.HOUR_OF_DAY, hour);
calendarStartTime.set(Calendar.MINUTE, min);
calendarStartTime.set(Calendar.SECOND, 0);

// Enable a Broadcast receiver
ComponentName receiver = new ComponentName(context, WaterAlarmReceiver.class);
PackageManager pm = context.getPackageManager();

pm.setComponentEnabledSetting(receiver, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

Intent intent1 = new Intent(context, WaterAlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, DAILY_WATER_REMINDER_REQUEST_CODE, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(ALARM_SERVICE);

//Here is where i try to set and reset alarms 
//according to the current hour, start hour and end hour.

if (now.after(calendarEndTime)) 
{
    //calendarStartTime.add(Calendar.DAY_OF_MONTH, 1);
    am.setRepeating(AlarmManager.RTC_WAKEUP, calendarStartTime.getTimeInMillis(), 1000 * 60 * interval, pendingIntent);
}
else if (calendarStartTime.before(calendarEndTime)) 
{
    am.setRepeating(AlarmManager.RTC_WAKEUP, calendarStartTime.getTimeInMillis(), 1000 * 60 * interval, pendingIntent);
    setWaterReminderEndTime(context, userPrefs.getWaterReminder_toHour(), userPrefs.getWaterReminder_toMin());
}

1 Ответ

0 голосов
/ 13 апреля 2019

Мне кажется, проблема в следующей строке:

am.setRepeating(AlarmManager.RTC_WAKEUP, calendarStartTime.getTimeInMillis(), 1000 * 60 * interval, pendingIntent);

Возможно, вы устанавливаете interval как 1, и вы не добавили множитель дня (24) для планирования нана следующий день, и именно поэтому будильник срабатывает каждую минуту.

Если проблема выше, проблема должна быть решена,

am.setRepeating(AlarmManager.RTC_WAKEUP, calendarStartTime.getTimeInMillis(), 1000 * 60 * 24 * interval, pendingIntent);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...