Запуск службы Android с помощью AlarmManager и широковещательного приемника


1

У меня есть служба Android. Он работает в фоновом режиме, проверяет URL-адрес для некоторых результатов. И если результаты будут изменены, приложение отправит уведомление пользователю. Я хочу, чтобы эта служба запускалась каждые 3 часа. Моя проблема в том, когда и как начать службу?

  • Общее поведение - создать приемник широковещательной передачи.
  • Затем начните обслуживание, когда получатель получит ACTION_BOOT_COMPLETED.
  • Также, когда получатель получает завершенную загрузку, приемник будет использовать AlarmManager и будет создавать будильник для запуска каждые 3 часа.

Но после установки приложения, что делать, если пользователь не перезагружает свой телефон? Если пользователь не загружается, AlarmManager не создает аварийный сигнал.

  • Таким образом, еще один вариант - создать будильник, когда пользователь сначала запускает приложение.
  • Что делать, если пользователь перезапустил приложение? Должен ли я отменить все предыдущие аварийные сигналы с AlarmManager.cancel и воссоздать аварийные сигналы?

Итак, в каких условиях вы устанавливаете аварийные сигналы для своих приложений Android?

+1

AFAIK, настраивая будильник для данного PendingIntent (на основе данного намерения), отменяет предыдущие аварийные сигналы для того же Намерение. Попробуйте. 28 окт. 132013-10-28 20:04:27

1

У вас есть два способа создать начальную тревогу, когда приложение запущено в первый раз или даже лучше, есть другой широковещательный приемник, прослушивающий ACTION_MY_PACKAGE_REPLACED. Это вызывается всякий раз, когда приложение установлено или обновлено, и вы можете настроить будильник, когда это произойдет или перезагрузка (поскольку перезагрузка очищает сигналы тревоги от диспетчера аварийных сообщений). Затем просто перезагружайте будильник каждый раз, когда запускается сервис.

В качестве дополнительной информации обратитесь к документации по Android WakeLock, если вы еще не используете ее. Без установки блокировки после запуска службы телефон может перейти в режим сна сразу после onStartCommand службы. И убедитесь, что сброс тревоги выполняется, даже если вы столкнулись с некоторой ситуацией с ошибкой (например, отсутствием сетевого подключения) внутри службы.

Редактировать: У некоторых людей были проблемы с ACTION_MY_PACKAGE_REPLACED. В этих случаях можно использовать ACTION_PACKAGE_REPLACED, если код проверяет, что это правильный пакет, который был заменен: ACTION_MY_PACKAGE_REPLACED not received

  0

Когда я обновляю свое приложение, я получаю «ACTION_MY_PACKAGE_REPLACED». Но это не срабатывает на новых установках. 12 ноя. 132013-11-12 20:43:00

  0

«ACTION_PACKAGE_ADDED» не всегда работает для меня. Похоже, мне нужно настроить аварийные сигналы на ACTION_MY_PACKAGE_REPLACED, на ACTION_BOOT_COMPLETED. Также мне нужно установить сигналы тревоги для каждого запуска моего приложения, иначе моя служба не будет запущена до перезагрузки или обновления приложения. 12 ноя. 132013-11-12 20:44:55