以项目中的天气为例
1、先有个后台服务获取到天气信息,去更新主界面的天气数据信息
private static WeatherWidget mAppWidgetProvider = WeatherWidget.getInstance();
public static PendingIntent getActivityIntent(Context context) {
Intent timeAndWeather = new Intent(context, TimeAndWeather.class);
timeAndWeather.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
timeAndWeather.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
Bundle bundle = new Bundle();
bundle.putString(Constants.INTENT_VARIABLE_WIDGET_CITY, finalCityName);
timeAndWeather.putExtras(bundle);
return PendingIntent.getActivity(context, 0, timeAndWeather, PendingIntent.FLAG_UPDATE_CURRENT);
}
mAppWidgetProvider.updateWidgetWeather(context, city,tempLow,tempHigh, condition,srcId,wind, outTemp,showContent ,weatherActivityIntent);
public class WeatherWidget extends AppWidgetProvider {
void updateWidgetWeather(Context context, String city, String tempLow,
String tempHigh, String condition, int srcId, String wind,
String outTemp,int showContent, PendingIntent weatherActivityIntent) {
......
final Resources res = context.getResources();
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
R.layout.widget);
remoteViews.setTextViewText(R.id.weather_city_condition, city);
remoteViews.setTextViewText(R.id.weather_wind_condition, wind);
remoteViews.setTextViewText(R.id.weather_range_condition, condition
+ " " + tempHigh + " / " + tempLow);
pushUpdate(context, null, remoteViews);
}
private void pushUpdate(Context context, int[] appWidgetIds,
RemoteViews views) {
// Update specific list of appWidgetIds if given, otherwise default to
// all
final AppWidgetManager gm = AppWidgetManager.getInstance(context);
gm.updateAppWidget(THIS_APPWIDGET, views);
}
static final ComponentName THIS_APPWIDGET = new ComponentName(
"cn.com.xxx.weather", "cn.com.xxx.weather.widget.WeatherWidget");
<receiver
android:name=".widget.WeatherWidget"
android:enabled="true"
android:exported="true"
android:icon="@drawable/icon" >
<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>
widget_provider.xml
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="394dip"
android:minHeight="177dip"
android:updatePeriodMillis="60000"
android:initialLayout="@layout/widget">
</appwidget-provider>
R.layout.widget
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget"
android:layout_width="410dip"
android:layout_height="match_parent"
android:layout_marginLeft="25dip" >
<ImageView
android:id="@+id/weather_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="155dip"
android:src="@drawable/leizhenyu" />
<include
android:id="@+id/out_temperature"
layout="@layout/out_temperature"
android:visibility="invisible"/>
<TextView
android:id="@+id/weather_city_condition"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/out_temperature"
android:layout_marginTop="30dip"
android:textColor="#ffffff"
android:textSize="24sp" />
<TextView
android:id="@+id/weather_range_condition"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/weather_city_condition"
android:layout_marginTop="10dip"
android:textColor="#ffffff"
android:textSize="20sp" />
<TextView
android:id="@+id/weather_wind_condition"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/weather_range_condition"
android:layout_marginTop="8dip"
android:textColor="#ffffff"
android:textSize="20sp" />
<!-- android:visibility="gone" -->
</RelativeLayout>