<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/timeshow" android:minHeight="72dip" android:minWidth="146dip" android:updatePeriodMillis="0" > </appwidget-provider>
2,Androidmanifest.xml
<receiver android:icon="@drawable/robot" android:name=".AppWidget" android:label="@string/app_name"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action> </intent-filter> <meta-data android:resource="@xml/timewidget" android:name="android.appwidget.provider"></meta-data> </receiver>
3, java中 AppWidget 继承 AppWidgetProvider 重写方法onUpdate
eg:
public class AppWidget extends AppWidgetProvider { private static Time mTime = new Time(); @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); context.startService(new Intent(context, WidgetService.class)); }}
WidgetService 是不断刷新widget的一个服务。
public class WidgetService extends Service { @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); AppWidgetManager manager=AppWidgetManager.getInstance(this); RemoteViews views=AppWidget.getTimeView(this); int[] appids=manager.getAppWidgetIds(new ComponentName(this, AppWidget.class)); manager.updateAppWidget(appids, views); //获取当前时间 long now =System.currentTimeMillis(); long unit=1000;//间隔一秒 PendingIntent pintent=PendingIntent.getService(this, 0, intent, 0); //计时器 AlarmManager alarm=(AlarmManager)getSystemService(Context.ALARM_SERVICE); //AlarmManager.RTC_WAKEUP设置服务在系统休眠时同样会运行 //第二个参数是下一次启动service时间 alarm.set(AlarmManager.RTC_WAKEUP, now+unit, pintent); }
这里有一个widget的刷新的好列子