Лучший момент / место для установки AlarmManager - PullRequest
6 голосов
/ 16 марта 2011

Мое приложение показывает контент для сайта, который также имеет систему уведомлений. Я хочу показать, есть ли новые уведомления, и я использую AlarmManager, который вызывает IntentService.

Мой вопрос: где мне начать / зарегистрировать AlarmManager? Я включил это в onCreate() своей деятельности только для проверки концепции (и она работает отлично, большое спасибо :)), но если вы начнете эту деятельность дважды, вы получите несколько аварийных сигналов.

Единственное возможное решение, которое я придумала, - это, но я не знаю, будет ли это наилучшей практикой

  • Запустить менеджер в onCreate(), если предпочтение «тревога запущена» ложно
  • Установите некоторую переменную, которую она запускает в настройках.

Теперь, если по какой-то причине сигнал тревоги прекратится, перезапустить его невозможно. Итак, вариация будет:

  • Всегда звоните, отмените в onCreate()
  • А затем всегда устанавливайте будильник.

Это похоже на общую закономерность: желание периодически получать информацию с будильником, а не устанавливать этот будильник более одного раза. Как мне это сделать? Когда, где и как зарегистрировать будильник?

Кроме того, продолжая комментарий @Zelimir: можете ли вы проверить, уже установлен ли определенный сигнал тревоги?

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

Для полноты, это код, который я сейчас использую для включения будильника:

AlarmManager alMan   = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent i             = new Intent(this, CommentService.class);
PendingIntent penInt = PendingIntent.getService(this, 0, i, 0);

alMan.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                          SystemClock.elapsedRealtime(), 
                          AlarmManager.INTERVAL_FIFTEEN_MINUTES, 
                          penInt);

Для еще большей полноты описание приложения / ситуация.
Приложение в основном показывает блоги (журналы, если хотите) с определенной страницы. У него есть действия для добавления записи, просмотра записей, добавления комментариев и т. Д. На «материнском» сайте есть возможность получать уведомления (например, число, которое вы видите здесь на SO, когда вы получаете сообщение). Я хочу показать, есть ли новые сообщения, и поэтому получать их каждые XX минут. На данный момент он будет отображаться в панели уведомлений, но позже может появиться виджет.

Если вам нужна дополнительная информация: приложение называется Androblip и поддерживает сайт blipfoto.com

1 Ответ

4 голосов
/ 16 марта 2011

Когда, где и как зарегистрировать будильник?

На это невозможно ответить абстрактно. Это полностью зависит от бизнес-правил для вашего приложения, которые вы отказались предоставить в своем вопросе.

Если мониторинг должен проводиться постоянно, типичная схема регистрации тревоги:

  • в onCreate() вашей основной деятельности за самый первый запуск вашего приложения
  • в BOOT_COMPLETED BroadcastReceiver, для обработки перезагрузок, которые стирают список AlarmManager

Вы можете проверить, установлен ли уже какой-либо будильник?

Нет, но вы можете отменить его без проблем. Просто создайте эквивалент PendingIntent и наберите cancel() на AlarmManager.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...