Почему тревога всегда срабатывает, когда я закрываю деятельность - PullRequest
0 голосов
/ 07 ноября 2019

В Android studio я хочу, чтобы мое приложение отправляло пользователю notification, если он его не использует. Notification - огонь, но всегда, когда я покидаю занятие и после 8:00

@Override
protected void onStop() {
    super.onStop();
    System.out.println("STARTED!");
    Intent intent = new Intent(this, Alarm.class);
    PendingIntent pendingIntent = 
    PendingIntent.getBroadcast(this.getApplicationContext(), 0, intent, 0);
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 8);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 1);
    alarmManager.cancel(pendingIntent);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
}

Будильник срабатывает один раз всегда, когда я покидаю занятие, и время больше 8: 00;

1 Ответ

0 голосов
/ 07 ноября 2019

Потому что это не точно.

Документация гласит: «Примечание: начиная с API 19 все повторяющиеся аварийные сигналы являются неточными. Если вашему приложению требуется точное время доставки, то оно должно использовать одноразовые точные аварийные сигналы, каждый раз меняя расписание, как описано выше. Устаревшие приложения, у которых targetSdkVersionраньше, чем API 19 будет продолжать обрабатывать все свои тревоги, включая повторяющиеся тревоги, как точные. "

https://developer.android.com/training/scheduling/alarms

Если вы хотите быть точным относительно времени, которое вы должны изменитьваш

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

метод. Вам следует рассмотреть возможность использования неповторяющихся сигналов тревоги (alarmManager.setExact method). Если вы все еще хотите запланировать повторение сигнала тревоги, вы можете перенести его в «Сигнал при получении».

...