Как настроить AlarmManager для запуска каждый первый день месяца? - PullRequest
0 голосов
/ 18 октября 2018

Я хочу, чтобы диспетчер аварийной сигнализации Android запускал службу в первый день каждого месяца.У меня есть следующий код:

     PersianCalendar persianCalendar = new PersianCalendar();
    persianCalendar.setTimeZone(TimeZone.getDefault());
   if( persianCalendar.getPersianDay()==1){

    Intent intent = new Intent(UsersActivity.this, AppsNetUsageReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 0, intent, 0);
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
           alarmManager.set(AlarmManager.RTC, persianCalendar.getTimeInMillis(), pendingIntent);
}

Как я могу гарантировать, что моя служба будет работать успешно, если устройство выключено или по какой-либо другой причине помешает моей службе работать?

1 Ответ

0 голосов
/ 18 октября 2018

Вы должны установить следующий сигнал тревоги при получении предыдущего сигнала тревоги.

В AlarmManager есть метод setRepeating(@AlarmType int type, long triggerAtMillis,long intervalMillis, PendingIntent operation), который можно использовать для установки повторяющихся сигналов тревоги, например, каждый час или каждые 15 минут.мин.

Но в этом случае вы не можете предоставить intervalMillis, так как интервалы могут отличаться из-за разного количества дней в месяцах.

И, как сказал @Ya Si, есть и другие способы установки сигналов тревоги помимо AlarmManager, который автоматически обрабатывает случаи отключения питания / перезапуска.Если вы все еще хотите использовать AlarmManager, проверьте: Запустите AlarmManager, если устройство перезагружено

...