Android - запустить задание в планировщике заданий Firebase в определенную дату и время

Я использую AlarmManager в нашем приложении для установки будильников на определенную дату и время. В последнее время мало кто из пользователей нашего приложения жалуется, что эти будильники не выскакивают. Кроме того, в рекомендациях Android O упоминается, что приложение не должно запускать какие-либо фоновые службы, а вместо этого должно переключаться на Firebase JobDispatcher. У меня есть следующие 2 вопроса

  1. В нашем приложении мы не выполняем никаких фоновых задач, кроме как показывать уведомление пользователю в указанное время и дату. Даже в этом случае мы должны переключиться на Firebase Jobdispatcher?
  2. В случае, если нам нужно переключиться на JobDispatcher, как можно настроить Задание для запуска в точно определенные дату и время?

person MonicaR    schedule 13.12.2017    source источник


Ответы (1)


Поскольку вы не выполняете никаких фоновых задач, таких как сетевые запросы или длительные операции ЦП, я думаю, вам следует продолжать использовать Alarm Manager.

В последнее время мало кто из пользователей нашего приложения жалуется, что эти будильники не выскакивают.

Это связано с тем, что когда срабатывает режим дремоты, не гарантируется, что ваши тревоги будут активированы (см. это).

Что вы можете сделать, так это использовать setAndAllowWhileIdle() или setExactAndAllowWhileIdle() из класса AlarmManager в соответствии с вашими требованиями для уровня API >= 23.

Согласно документации, они подходят для целей уведомления. setAndAllowWhileIdle() документация:

Аналогично set(int, long, PendingIntent), но этот аварийный сигнал будет разрешен, даже когда система находится в режимах ожидания с низким энергопотреблением. Этот тип будильника следует использовать только в тех случаях, когда действительно требуется, чтобы будильник срабатывал во время простоя — разумным примером может быть уведомление календаря, которое должно издавать звук, чтобы пользователь знал об этом. Когда тревога отправлена, приложение также будет добавлено во временный белый список системы примерно на 10 секунд, чтобы позволить этому приложению получить дополнительные блокировки пробуждения для завершения своей работы.

person Yash Verma    schedule 13.12.2017
comment
Спасибо Яш за ответ. Полностью решить не получается. У многих устройств, таких как RedMi Note 4, есть проблема. Если пользователь убивает приложение в фоновом режиме, уведомления не отображаются. В таких случаях пользователь должен явно внести приложение в белый список из настроек. Даже у Samsung есть умный менеджер, который отключает ваше приложение, если оно неактивно более 2-3 дней. - person MonicaR; 09.03.2018
comment
Для устройств Xiaomi вам необходимо иметь разрешение на автозапуск, иначе ваше приложение будет уничтожено, если пользователь удалит его из последних приложений. Вы можете попросить пользователя предоставить это разрешение. Для других устройств см. этот github.com/dirkam/backgroundable-android. - person Yash Verma; 10.03.2018
comment
Мы делаем это, но запрос пользователя на предоставление разрешений не является плавным потоком. - person MonicaR; 11.03.2018
comment
Да, это не плавный поток, и даже я страдаю от этого в своих приложениях. Однако, согласно следующей ссылке, его нельзя удалить без внесения в белый список Xiaomi. stackoverflow.com/a/39476850 - person Yash Verma; 11.03.2018
comment
@MonicaR Вы решили проблему с разрешением автозапуска на устройствах Mi? - person Yash Verma; 31.05.2018
comment
Мы исправили проблему по-другому, так как нам просто нужно было показать тревогу и не нужно было делать какие-либо сетевые вызовы, мы убрали использование службы намерений и вместо этого использовали явный широковещательный приемник. Это решило проблему, и теперь будильники отображаются и на устройствах Mi, хотя автозапуск не включен. - person MonicaR; 01.06.2018