Jollen 的 Android 教,#25: HelloAppWidgetProvider.ja
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