Jollen 的 Android 教學,#25: HelloAppWidgetProvider.java 程式碼說明

转载自:http://blog.chinaunix.net/u/14644/showart_1998061.html

HelloAppWidgetProvider.java 程式碼說明



圖1: HelloAppWidgetProvider的設計
圖1是目前我們的HelloAppWidget範例設計,說明如下:

onUpdate(): 收到ACTION_APPWIDGET_UPDATE廣撥時,框架會callback此method
onDelete(): 收到ACTION_APPWIDGET_DELETE廣撥時,框架會callback此method
AppWidgetManager: 管理App Widget的類別
先前,在AndroidManifest.xml裡我們讓HelloAppWidgetProider類別可以接收 ACTION_APPWIDGET_UPDATE廣撥事件;ACTION_APPWIDGET_UPDATE是最主要的App Widget事件,當AppWidgetProvider被要求為App Widget提供”RemoteView”時,就會收到這個事件。

什麼是RemoteViews?

什麼是RemoteView呢?先看一下框架的設計,如圖2。

簡單來說,「RemoteViews」就是表示UI的類別。res/layout/main.xml描述了應用程式的UI,UI裡當然包含許多組件 (Widget),而在先前的教學裡講到了一個觀念「Android應用程式的UI就是一個View tree」,view tree就是「View Hierarchy」。

總結來說,RemotViews是一個用來表示View Hierarchy的類別。透過RemoteViews可以找到UI裡的每一個組件。



圖2: RemoteView的設計(點擊看全圖)
程式說明: HelloAppWidgetProvider.java

onUpdate()的程式實作:




public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int N = appWidgetIds.length;
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
updateAppWidget(context, appWidgetManager, appWidgetId);
}
}


說明如下:

1. onUpdate()負責更新「已經安裝」在桌面上的App Widget內容,因此我們實作一個updateAppWidget()來進行真正更新的工作

2. onUpdate()的第二個參數為AppWidgetManager,這是一個「管理AppWidgetProvider」的類別,我們必須透過框架 callback本方法時回傳給我們的AppWidgetProvider物件,來更新桌面上的App Widget

3. onUpdate()的第三個參數appWidgetIds陣列,存放需要更新的App Widget ID;框架會將需要更新的App Widget之ID回傳給onUpdate(),程式必須負責「更新每一個需要更新的App Widget。」

更新App Widget的方式是透過AppWidgetManager來完成,程式實作:






static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
CharSequence text;

text = "www.jollen.org";

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
views.setTextViewText(R.id.appwidget_text, text);

appWidgetManager.updateAppWidget(appWidgetId, views);
}
}

說明如下:

1. 透過UI layout取得自已的「View Hierarchy」(UI),以前面介紹的RemoteViews物件表示

2. 如圖2,呼叫RemoteView的setTextViewText()方法,修改UI裡的「R.id.appwidget_text」組件,變更文字內容

3. 呼叫AppWidgetProvider的updateAppWidget()方法,更新我們所指定的App Widget,將其UI更新為RemoteView的UI

4. updateAppWidget()的第二個參數為RemoteView,即說明1.取得的UI,說明2.修改了此UI裡的”R.id.appwidget_text”組件,最後透過App Widget Manager更新App Widget的UI

--jollen

更多相关文章

  1. 『转自墙外』 [Android] Root 原理與手動 Root 詳細過程 @ Nexus
  2. 多线程实现Android更新进度条
  3. Android软件框架的搭建笔记
  4. Android(安卓)网络通信框架Volley (Google IO 2013)
  5. Android(安卓)SDK下载和更新失败的解决方法
  6. Android之使用Android-query框架进行开发(二)
  7. Android应用程序组件Content Provider的共享数据更新通知机制分
  8. HTML5 经量级框架 jQuery Mobile 视图与页面 - 7.2
  9. Android(安卓)在非UI线程直接更新UI信息

随机推荐

  1. [Android] 零碎知识汇总 - RecyclerView
  2. android in practice_Communicating chan
  3. 模拟抽奖的九宫格动画效果
  4. Android学习之使用HttpURLConnection下载
  5. Tips for Designers: from a Developer[S
  6. 垂直滚动跑马灯AutoScrollTextView
  7. Android(安卓)Calendar的运用
  8. 12.8 SeekBar和RatingBar
  9. android竖排TextView(字是横向的)
  10. Android(安卓)RecyclerView实现在线选座