Можно ли определить, как вызывался метод onUpdate () AppWidgetProvider? - PullRequest
0 голосов
/ 21 февраля 2012

Как я знаю, существует два типа вызова метода onWpdate () AppWidgetProvider:

  1. когда срок действия круга updatePeriodMillis истек
  2. когда новый виджет добавляется на домашний экран

В методе onUpdate () я хочу запустить какой-либо сервис в первом случае, но не во втором. Можно ли определить, как вызывался onUpdate ()?

1 Ответ

0 голосов
/ 21 февраля 2012

Я думаю, что в рассылке обновлений нет простого флага, который указывает на любую ситуацию.

Имейте в виду, что каждый ACTION_APPWIDGET_UPDATE широковещательный (и, следовательно, каждый вызов onUpdate ()) содержит все или подмножество идентификаторов appwidget для целей обновления.Эти идентификаторы являются постоянными в течение жизненного цикла виджета, каждый из которых имеет один и тот же идентификатор до тех пор, пока он не будет удален.

Это означает, что вы можете хранить свои идентификаторы и сравнивать их каждый раз, когда вы получаете вызов onUpdate ().Если вы нажмете onUpdate () с идентификатором в предоставленном массиве, которого нет в ваших сохраненных записях, вы можете быть уверены, что это новый экземпляр виджета, который будет обновлен.В противном случае это один или несколько старых.

Чтобы сохранить ваши записи в чистоте, вы должны также внедрить onDeleted() в вашем провайдере.Удалите удаленные идентификаторы из ваших записей.В противном случае вы можете столкнуться с проблемами, когда пользователь удаляет виджет и добавляет новый экземпляр, он может получить тот же идентификатор.

...