対処は、Orientation changeをキャッチして、PendingIntentを再設定して、RemoteViewを書き直す。書き直しはやらなくていいかも。
リンクの例では正しく動作しない。oldOrientation が newConfigと同じになる。
public static class UpdateService extends Service {
private List 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;
}
}
Manifestでandroid.permission.CHANGE_CONFIGURATION も必要
始めまして。
返信削除私も同じ症状で悩んでいたので、この記事は大変参考になります。
つきましては一つ教えて頂きたい事があります。
上記の中にあるmContextはどこかで変数を持つのでしょうか?
お返事頂けると助かります。
コメントありがとうございます。
返信削除わかりにくくてすみません。添付のUpdateServiceクラスはAppWidgetProviderの派生クラスのサブクラスです。その派生クラスのメンバ変数でした。現在のコードではサービスクラスのthisを渡しています。
お返事ありがとうございました。
返信削除thisに気付くべきでした^^;
本当にありがとうございます。