AlarmManager срабатывает с задержкой

281
26 января 2017, 01:48

AlarmManager срабатывает не в конкретно заданное время, а спустя ~5 минут после заданного времени... Why? А так же срабатывает, если я его активирую по прошедствию времени. То есть, если он установлен на 10:00, и я его активирую в 11:00 то по идее он должен сработать завтра в 10:00, но он срабатывает сеюжеминутно. И сработает завтра в ~10:05

   void setMorningAlarm(Context context){
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
        PendingIntent pi = PendingIntent.getBroadcast(context, morningId, intent, 0);
        Calendar time = Calendar.getInstance();
        time.set(Calendar.HOUR_OF_DAY, 8);
        time.set(Calendar.MINUTE, 0);
        alarmManager.setInexactRepeating(
                AlarmManager.RTC_WAKEUP,
                time.getTimeInMillis(),
                AlarmManager.INTERVAL_DAY,
                pi);
        Toast.makeText(context,"Morning Notify", Toast.LENGTH_SHORT).show();
    }
Answer 1

Для точного срабатывания по времени используйте setRepeating() вместо setInexactRepeating.

По поводу немедленного срабатывания сегодня, если назначенное время сегодня уже в прошлом. Дело в том, что сделав, как описано у Вас в вопросе, например, в 11.00, Вы получаете просроченный Alarm, который немедленно выполняется. Так заложено в системе. Чтобы этого избежать проследите, чтобы время срабатывания было в будущем. Если оно уже в прошлом, прибавьте сутки. Например, так:

    Calendar timeToFireAlarm = Calendar.getInstance();
    timeToFireAlarm .set(Calendar.HOUR_OF_DAY, 8);
    timeToFireAlarm .set(Calendar.MINUTE, 0);
    Calendar now = Calendar.getInstance();
    if(timeToFireAlarm.getTimeInMillis < now.getTimeInMillis())
         timeToFireAlarm.add(Calendar.timeToFireAlarm, 1);
READ ALSO
Почему не могу получить доступ к методам dll библиотеки?

Почему не могу получить доступ к методам dll библиотеки?

Добрый день, работаю с JNA подключился через интерфейс кdll библиотеке но при вызове из неё метода пишет

321
Настроить цикличный запуск

Настроить цикличный запуск

Доброго времени сутокЕсть код:

290
Удалить линию Line2D двойным кликом мышки (Java | JFrame)

Удалить линию Line2D двойным кликом мышки (Java | JFrame)

Добрый день! Хочу удалить нарисованную линию двойным кликом мышкиПри навведении на линию, курсор не меняется на крест

374