android AppWidgetProvider使用



以项目中的天气为例


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>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用AppWidgetProvider类来创建和管理桌面小部件是相对简单的。下面是一般的使用步骤: 1. 创建一个类,并继承自AppWidgetProvider: ```java public class MyWidgetProvider extends AppWidgetProvider { // 实现相关的回调方法 } ``` 2. 在AndroidManifest.xml文件中注册你的AppWidgetProvider类: ```xml <receiver android:name=".MyWidgetProvider" android:label="My Widget"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_info" /> </receiver> ``` 3. 在res/xml目录下创建一个widget_info.xml文件,定义小部件的相关属性和配置: ```xml <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="100dp" android:minHeight="100dp" android:updatePeriodMillis="0" android:previewImage="@mipmap/ic_launcher" android:initialLayout="@layout/widget_layout"> </appwidget-provider> ``` 你可以根据实际需求修改这个文件中的属性。 4. 在你的AppWidgetProvider类中重写所需的回调方法,常用的回调方法包括: - onUpdate(): 当小部件需要更新时调用,通常在创建小部件和接收到更新广播时触发。 - onDeleted(): 当小部件从桌面上删除时调用。 - onEnabled(): 当第一个小部件添加到桌面时调用。 - onDisabled(): 当最后一个小部件从桌面上移除时调用。 你可以根据具体的业务需求,在这些方法中添加逻辑来处理小部件的创建、更新、删除等操作。 希望以上信息对你有所帮助!如有更多问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值