AppWidgetProvider: не вызывается метод onEnabled

У меня есть виджет, который отображает данные от поставщика контента. Я хочу знать, когда данные в контент-провайдере меняются. Насколько я знаю, способ сделать это

context.getContentResolver().registerContentObserver

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

Как решить эту проблему?

Спасибо


person Division    schedule 30.03.2011    source источник


Ответы (2)


Вам нужно добавить android.appwidget.action.APPWIDGET_ENABLED в качестве еще одного действия:

<intent-filter>
    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    <action android:name="android.appwidget.action.APPWIDGET_ENABLED" />
    <action android:name="android.appwidget.action.APPWIDGET_DELETED" />
    <action android:name="android.appwidget.action.APPWIDGET_DISABLED" />  
</intent-filter>

Без этого вы не получите трансляцию, которая запускает onEnabled().

примечание: APPWIDGET_DELETED для onDeleted(...), APPWIDGET_DISABLED для onDisabled(...)

person GalDude33    schedule 12.10.2011
comment
Это действительно правильно? Официальный образец WeatherListWidget обрабатывает onEnabled, но не имеет этого действия в своем манифесте. - person Tom anMoney; 05.02.2013
comment
Я только что проверил это, но, по крайней мере, на моем Galaxy Nexus 4.2.1 onEnabled вызывается, даже если фильтр намерений отсутствует. - person Tom anMoney; 05.02.2013
comment
Из официальной документации: ... там указано, что AppWidgetProvider принимает трансляцию ACTION_APPWIDGET_UPDATE. Это единственная широковещательная рассылка, которую вы должны объявить явно. AppWidgetManager автоматически отправляет все другие широковещательные рассылки AppWidget в AppWidgetProvider по мере необходимости. - person Zsolt Safrany; 11.08.2013

AppWidgetProvider (или любой другой зарегистрированный в манифесте BroadcastReceiver) не может вызывать registerContentObserver(). Сущность, которая изменяет ваш контент, должна будет обновить виджет вашего приложения, или вам нужно будет реализовать какой-то механизм опроса (например, проверить наличие нового контента на основе android:updatePeriodMillis).

person CommonsWare    schedule 30.03.2011