`

接收来自AppWidget的广播并更新控件状态

阅读更多

一 接收来自App Widget的广播

   1.在AndroidManifest.xml为AppWidgetProvider注册新的intente-filter;

   2.使用getBroadcast()创建一个PendingIntent;

   3.为App Widget中的控件注册处理器;

   4.在onReceive方法中接收广播;

a.布局文件中有个Button

  <Button 
  	android:id="@+id/widgetButtonId"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="測試用按鈕"
  />

 

b.在extends AppWidgetProvider实现类中定义了一个变量

private static final String state="my_state";

 c.在AndroidManifest.xml注册

	<receiver android:name="ExampleAppWidgetProvider">
		<intent-filter>
			<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
		</intent-filter>
		<intent-filter >
			<action android:name="my_state"/>
		</intent-filter>
		<meta-data android:name="android.appwidget.provider"
			android:resource="@xml/example_appwidget_info" />
	</receiver>

 d.复写onUpdate方法发送广播

@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
			int[] appWidgetIds) {
Intent intent=new Intent();
		intent.setAction(state);
		//发送广播
		PendingIntent pendingIntent=PendingIntent.getBroadcast(context, 0, intent, 0);
		RemoteViews remoteViews=new RemoteViews(context.getPackageName(), R.layout.example_appwidget);
		remoteViews.setOnClickPendingIntent(R.id.widgetButtonId, pendingIntent);
		appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
		
		super.onUpdate(context, appWidgetManager, appWidgetIds);
	}

 

d.复写onReceive方法接收广播

@Override
	public void onReceive(Context context, Intent intent) {
		String action=intent.getAction();
		if(state.equals(action)){
			System.out.println("onReceive--"+action);
		}else{
			super.onReceive(context, intent);
		}
		
	}

 

当我们点击button时,后台打印出数据:



 二 更新控件状态

1.代码同上,只是在布局文件中加入一个textview

  <TextView 
  	android:id="@+id/widgetTextId"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="firstWidgetText"
  android:background="#000000"  
  />

 2.onUpdate代码同上,只是onReveice方法不同

@Override
	public void onReceive(Context context, Intent intent) {
		String action=intent.getAction();
		if(state.equals(action)){
			RemoteViews remoteViews=new RemoteViews(context.getPackageName(), R.layout.example_appwidget);
			
			remoteViews.setTextViewText(R.id.widgetTextId, "xixi");
			
			AppWidgetManager appWidgetManager=AppWidgetManager.getInstance(context);
			ComponentName componentName=new ComponentName(context,ExampleAppWidgetProvider.class);
			appWidgetManager.updateAppWidget(componentName, remoteViews);
		}else{
			super.onReceive(context, intent);
		}
		
	}

 

程序运行效果就是,点击button文字改变为“xixi”.

 



 

  • 大小: 1.5 KB
  • 大小: 25.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics