res/xml/widget_provider.xml: <?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="98dip" android:minHeight="98dip" android:updatePeriodMillis="10000" android:initialLayout="@layout/main" > </appwidget-provider> res/layout/main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/wordcup_logo" > <TextView android:id="@+id/wordcup" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout> Manifest: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.urey" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <receiver android:name=".WidgetDemo" android:label="@string/app_name"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_provider" /> </receiver> </application> </manifest> WidgetDemo.java: package com.urey; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Timer; import java.util.TimerTask; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.ComponentName; import android.content.Context; import android.widget.RemoteViews; public class WidgetDemo extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // TODO Auto-generated method stub Timer timer = new Timer(); timer.scheduleAtFixedRate(new MyTimerTask(context, appWidgetManager), 1, 60000); super.onUpdate(context, appWidgetManager, appWidgetIds); } public class MyTimerTask extends TimerTask { RemoteViews remv; AppWidgetManager awm; ComponentName cn; public MyTimerTask(Context ctx, AppWidgetManager appwgtmana) { awm = appwgtmana; remv = new RemoteViews(ctx.getPackageName(), R.layout.main); cn = new ComponentName(ctx, WidgetDemo.class); } @Override public void run() { // TODO Auto-generated method stub Date date = new Date(); Calendar calendar = new GregorianCalendar(2011,02,03); long days = ((calendar.getTimeInMillis()-date.getTime())/1000)/86400; remv.setTextViewText(R.id.wordcup, "距離春節還有"+days+"天"); awm.updateAppWidget(cn, remv); } } }