android AppWidgetProvider使用

本文介绍了一个天气Widget的应用案例,展示了如何通过后台服务获取并更新天气数据。具体包括使用PendingIntent进行活动启动配置、通过RemoteViews更新UI元素以及利用AppWidgetManager进行Widget更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



以项目中的天气为例


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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值