Я знаю, что это старый вопрос, но действительно есть более простой способ сделать это, чем делегировать обновление IntentService.
Способ справиться с изменениями ориентации - прослушать изменения конфигурации в Приложении и передать ACTION_APPWIDGET_UPDATE виджету.
Добавление класса приложения в ваше приложение
public class MyApplication extends Application {
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// create intent to update all instances of the widget
Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE, null, this, MyWidget.class);
// retrieve all appWidgetIds for the widget & put it into the Intent
AppWidgetManager appWidgetMgr = AppWidgetManager.getInstance(this);
ComponentName cm = new ComponentName(this, MyWidget.class);
int[] appWidgetIds = appWidgetMgr.getAppWidgetIds(cm);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
// update the widget
sendBroadcast(intent);
}
}
Метод будет вызываться всякий раз, когда происходит изменение конфигурации, одним из которых является изменение ориентации. Вы можете улучшить метод, выполняя трансляцию только тогда, когда это изменение ориентации, а не, например. изменение языка системы.
Этот метод в основном отправляет широковещательную рассылку обновлений всем экземплярам вашего виджета.
Определите MyApplication в манифесте
<application
android:name="yourpackagename.MyApplication"
android:description="@string/app_name"
android:label="@string/app_name"
android:icon="@drawable/app_icon">
<!-- here go your Activity definitions -->
</application>