android學習記錄(十八)---AppWidget顯示內容隨數據改變而更新

我們知道,appWidget可通過設置widgetinfo中的updateTimeMillies設置更新的間隔,那麼,當我們需要實時進行更新的時候呢?該如何進行appWidget顯示內容的更新?如行程應用中添加了新的行程,想立刻在appWidget顯示內容更新。

如何?

我們知道,widgetProvider本質上就是一個廣播接收器,所以我們可以在數據修改處發送一個與之符合的廣播。

當我們的intent並沒附帶任何額外數據,只定義了action的時候,會調用WidgetProvider中的onReceive方法。

那麼我們就簡單的實現以下數據實時更新:

發送廣播:

public void addData(Context context){
    add....();
    updateWidget(context)
}
//發送廣播,使appWidget更新
private void updateWidget(Context context) {
    Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE);  
    context.sendBroadcast(intent);
}

YourAppWidgetProvider代碼:

@Override
public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
        final AppWidgetManager mgr = AppWidgetManager.getInstance(context);
        final ComponentName cn = new ComponentName(context, EventWidgetProvider4x2.class);
        mgr.notifyAppWidgetViewDataChanged(mgr.getAppWidgetIds(cn), R.id.widget4x2LV);
}

我又好奇什麼時候會調用AppWidgetProvider的onUpdate呢?

查看AppWidgetProvider部分源碼:

  public void onReceive(Context context, Intent intent) {
               String action = intent.getAction();
        if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) {
            Bundle extras = intent.getExtras();
            if (extras != null) {
                int[] appWidgetIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);
                if (appWidgetIds != null && appWidgetIds.length > 0) {
                    this.onUpdate(context, AppWidgetManager.getInstance(context), appWidgetIds);
                }
            }
        }
…

即只有在intent中含有extras且key爲AppWidgetManager.EXTRA_APPWIDGET_IDS的值不爲空時調用。
當我們的廣播不含有這個extras的時候,onReceive會調用,onUpdate不會。


隨時歡迎各路好漢能發表見解,想法值得分享~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章