我有幾個小部件,其基本上都是我的應用程序內快速鏈接功能,的Widget UI不響應更新廣播
這些構件基本的ListView/GridView的其正在通過在主要改變的數據備份應用程序的執行。
由於數據的應用程序執行過程中不僅改變了更新頻率被設定爲這樣:
android:updatePeriodMillis="0"
,並在數據改變了我火了以下內容:
public void updateWidget(@SuppressWarnings("rawtypes") Class provider) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
int[] gridids = appWidgetManager.getAppWidgetIds(new ComponentName(this.getPackageName(), provider.getName()));
Intent intent = new Intent(this, provider);
intent.setAction("android.appwidget.action.APPWIDGET_UPDATE");
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,gridids);
sendBroadcast(intent);
}
我能在供應商的onReceive()
,並從他們的呼叫更新機制趕上這樣的:
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
Log.e(this.getClass().getSimpleName(), "onReceive()");
int[] ids = intent.getExtras().getIntArray("appWidgetIds");
for(int id : ids) onUpdateWithService(context, id);
}
protected void onUpdateWithService(Context context, int widgetId) {
super.onUpdateWithService(context, widgetId);
RemoteViews views = new RemoteViews(context.getPackageName(), getResourceLayout(context, widgetId));
Intent intent = new Intent(context, GridViewWidgetServiceAdapter.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
views.setRemoteAdapter(R.id.listView, intent);
views.setPendingIntentTemplate(R.id.listView, PendingIntent.getActivity(context, -1, new Intent(), PendingIntent.FLAG_UPDATE_CURRENT));
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
appWidgetManager.updateAppWidget(widgetId, views);
}
我遇到的問題是,雖然代碼觸發並調用了updateAppWidget()
,但小部件的UI不會更改。
我錯過了Widget更新中涉及的技巧嗎?
還要記住的是,設置機器人:下面updatePeriodMillis 30分鐘不會將其設置爲該時間,它會自動回退到30分鐘。只能使用代碼覆蓋30分鐘的最小計時器。 – Milan
@Milanix - 不根據[android文檔](http://developer.android.com/guide/topics/appwidgets/index.html) - 將其設置爲0將禁用自動更新。 – Graeme
啊,錯過了,謝謝。無法停止學習:) – Milan