Как отправлять локальное уведомление каждый день в указанное c время в Android (API> 26) - PullRequest
1 голос
/ 13 февраля 2020

Я искал Stackoverflow и Google, но не получил ответов.

Я не могу найти способ отправки уведомлений в указанное c время, которое происходит каждый день. Ниже уровня API 26 это не проблема. Как я могу сделать это в API> 26?

Я знаю, что мне нужно создать канал для создания уведомлений в API> 26, но как настроить его на ежедневное повторение?

1 Ответ

0 голосов
/ 13 февраля 2020

Начиная с API 19, выдача аварийных сообщений является неточной (ОС будет сдвигать аварийные сигналы, чтобы минимизировать количество пробуждений и использование батареи). Это новые API, которые обеспечивают строгие гарантии доставки:

  1. see setWindow(int, long, long, android.app.PendingIntent)
  2. setExact(int, long, android.app.PendingIntent)

Итак, мы можем использовать setExact:

public void setExact (int type, 
                long triggerAtMillis, 
                PendingIntent operation)

setExact может Запланировать доставку будильника точно в указанное время.

Этот метод похож на set (int, long, android .app.PendingIntent), но не позволяет ОС корректировать время доставки. Тревога будет доставлена ​​как можно ближе к запрошенному времени запуска.

Сначала используйте setExact следующим образом:

void scheduleAlarm(Context context) {
    AlarmManager alarmmanager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent yourIntent = new Intent();
    // configure your intent here
    PendingIntent alarmIntent = PendingIntent.getBroadcast(context, MyApplication.ALARM_REQUEST_CODE, yourIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    alarmmanager.setExact(AlarmManager.RTC_WAKEUP, timeToWakeUp, alarmIntent);
}

Теперь, запланируйте следующее вхождение (для повторения) в onReceive вашего BroadcastReceiver, как показано ниже:

public class AlarmReceiver extends BroadcastReceiver  {
  @Override
  public void onReceive(Context context, Intent intent) {
    // process alarm here
    scheduleAlarm(context);
  }
}
...