android之appwidget(三)自定義action廣播

 

緊接上集的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控件進行修改,請期待。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章