android之appwidget(三)自定义action广播

本文介绍了如何在Android AppWidget中定义自定义Action,并通过广播完成特定操作。文章详细展示了如何在AndroidManifest.xml中配置接收器,如何在AppWidgetProvider中设置自定义Action并响应它。
摘要由CSDN通过智能技术生成

 

紧接上集的appwidget,我们学了如何在appwidget中启动一个新activity,这次我们要根据自己的一个action而启动一个广播,从而完成我们需要的操作。

首先是新知识点:

首先,我们已经知道appwidget根本是基于广播事件的,这个从我们需要在AndroidManifest.xml配置receiver可以看出,既然是这样,那么我们也可以自己定义我们自己的action以及在provider中的onReceive中进行处理。

其次,我们需要知道appwidgetprovider的运行机制就更容易理解了,当appwidget有事件时就会发送一个广播(一个intent对象)到appwidgetprovider,他首先会启动onReceive方法来接收action,然后根据action的值来决定调用onUpdate,onDelete,onDisable,onEnable中的一个方法,他的这些方法都与一个action对应。这个模式和struts的请求分发差不多。

目前我还没找到如何上传本地图片的方法,所以只能用文字来描述,希望大家理解。

 

我们下面的实例实现的是自己定义一个action,然后在appwidgetprovider中的onReceiver中截取,然后输出一句话。

废话不多,代码如下:

 

1、首先在AndroidManifest.xml加入

 

<receiver android:name = "AppwidgetProvider">
	<intent-filter>
		<action
android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
	</intent-filter>
	<intent-filter >
	         <action android:name="hanl.UPDATE_ACTION"/>
	</intent-filter>
	<meta-data android:name="android.appwidget.provider"
				android:resource="@xml/appwidget_info">
	</meta-data>
</receiver>
 

 

我们增加了一个过滤器:action为"hanl.UPDATE_ACTION"。

 

 

2、我们在onUpdate函数内增加一个intent,为他设置action为hanl.UPDATE_ACTION,然后用pendingintent包装intent,然后进行事件绑定。这个在appwidget(一)有具体讲解。

 

 

	               @Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
			int[] appWidgetIds) {
		// TODO Auto-generated method stub
			//新intent
			Intent intent = new Intent();
//设置action,这个UPDATE_ACTION在上面定义的为static final String UPDATE_ACTION=hanl.UPDATE_ACTION;
			intent.setAction(UPDATE_ACTION);
			//创建一个pendingIntent。另外两个参数以后再讲。
			PendingIntent pendingIntent = PendingIntent.getBroadcast(
					context, 0, intent, 0);
			//创建一个remoteViews。
			RemoteViews remoteViews  = new RemoteViews(
					context.getPackageName(), R.layout.appwidget);
			//绑定处理器,表示控件单击后,会启动pendingIntent。
			remoteViews.setOnClickPendingIntent(R.id.button, pendingIntent);
			//更新
			appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
		super.onUpdate(context, appWidgetManager, appWidgetIds);
	}

 

 

3、然后在onReceive中进行拦截。

 

     @Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
		String action = intent.getAction();
		if(action.equals(UPDATE_ACTION))
			System.out.println("onReceive-----"+action);
		super.onReceive(context, intent);
	}

 

 运行结果传不上来,大家试下看看,能不能输出这个action,预祝成功!

下集我们将讲解如果对appwidget控件进行修改,请期待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值