対処は、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; } }
始めまして。
返信削除私も同じ症状で悩んでいたので、この記事は大変参考になります。
つきましては一つ教えて頂きたい事があります。
上記の中にあるmContextはどこかで変数を持つのでしょうか?
お返事頂けると助かります。
コメントありがとうございます。
返信削除わかりにくくてすみません。添付のUpdateServiceクラスはAppWidgetProviderの派生クラスのサブクラスです。その派生クラスのメンバ変数でした。現在のコードではサービスクラスのthisを渡しています。
お返事ありがとうございました。
返信削除thisに気付くべきでした^^;
本当にありがとうございます。