Использование AlarmManager с разными API - PullRequest
0 голосов
/ 12 мая 2018

Насколько я понимаю, если я хочу создать точный повторяющийся сигнал тревоги (независимо от того, находится устройство в режиме ожидания или нет) с использованием класса AlarmManager, я должен использовать другую схему в зависимости от установленной версии Android. Согласно моим показаниям, мне нужно было бы использовать setRepeating с RTC_WAKEUP для API до 18, setExact с ручной перепланировкой RTC_WAKEUP для API между 19 и 22 и, наконец, setExactAndAllowWhileIdle с ручной перепланировкой для API> = до 23 .

  1. Как мне обращаться со всеми делами? Должен ли я проверить версию API и затем соответственно запрограммировать Alarm?

  2. Или есть библиотека поддержки, которую я мог бы использовать для обратной совместимости, которая работала бы для всех сценариев?

  3. Если я должен использовать первый вариант, описанный выше, как мне отменить сигналы тревоги? Нужно ли использовать аналогичную схему, в которой я проверю используемую версию API и получу другой код для отмены, соответствующий установленному API?

Спасибо. J

1 Ответ

0 голосов
/ 12 мая 2018

Как мне обращаться со всеми делами?Должен ли я проверить версию API и затем соответствующим образом запрограммировать Alarm?

Если вы хотите, вы можете использовать set() в версиях Android до 19 и сохранять совместимое расписание перепланирования для всех версий, скореечем ручное перепланирование для одних и автоматическое планирование для других.

Также обратите внимание, что в Android P я бы ожидал, что даже setExactAndAllowWhileIdle() не будет точным, если ваше приложение попадет в резервную корзину неактивных приложений.

Или есть библиотека поддержки, которую я мог бы использовать для обратной совместимости, которая работала бы для всех сценариев?

Существует AlarmManagerCompat,которая предлагает обратно-совместимую реализацию setExactAndAllowWhileIdle().

как мне отменить сигналы тревоги?Нужно ли использовать аналогичную схему, в которой я проверю используемую версию API и получу другой код для отмены, соответствующий установленному API?

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

...