対処は、Orientation changeをキャッチして、PendingIntentを再設定して、RemoteViewを書き直す。書き直しはやらなくていいかも。
リンクの例では正しく動作しない。oldOrientation が newConfigと同じになる。
public static class UpdateService extends Service { private ListManifestでandroid.permission.CHANGE_CONFIGURATION も必要mIdList; private int mOrientation; @Override public void onStart(Intent intent, int startId) { Bundle extras = intent.getExtras(); int id = AppWidgetManager.INVALID_APPWIDGET_ID; if (extras != null) { id = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); } if (id == AppWidgetManager.INVALID_APPWIDGET_ID) { return; } if (mIdList == null) { mIdList = new ArrayList (); } mIdList.add(id); AppWidgetManager manager = AppWidgetManager.getInstance(this); updateWidget(mContext, manager, id); } @Override public void onConfigurationChanged(Configuration newConfig) { if(newConfig.orientation != mOrientation) { mOrientation = newConfig.orientation; AppWidgetManager manager = AppWidgetManager.getInstance(this); for (int id : mIdList) { updateWidget(mContext, manager, id); } } } @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } }