android示例之AppWidget(3)
来源:互联网 发布:jquery数组增加元素 编辑:程序博客网 时间:2024/05/22 11:43
今天要完成的是接收来自AppWidget的广播和更新AppWidget控件的状态。
接收来自AppWidget的广播的步骤:
1、在Manifest当中为AppWidget注册新的intent-filter:要想接收Intent必须要有intent-filter,intent-filter决定了可以接收哪些intent。从本质上来讲AppWidgetProvider就是一个Broadcast;
2、使用getBroadcast方法创建一个PendingIntent;
3、为AppWidget中的控件注册处理器;
4、在onReceive方法中接收广播消息;
完成接收来自AppWidget功能和上一次通过接收来自AppWidget调用一个新的Activity是类似的。
布局文件不再贴出。
Manifest文件:
<receiver android:name="ExampleAppWidgetProvider"> <intent-filter > <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> </intent-filter> <intent-filter > <action android:name="com.lyc.appwidget02.update_appwidget"/> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/example_appwidget_info"/> </receiver>
ExampleAppWidgetProvider.java
public class ExampleAppWidgetProvider extends AppWidgetProvider {//定义自己的Actionprivate static final String UPDATE_ACTION="com.lyc.appwidget02.update_appwidget";@Overridepublic void onDeleted(Context context, int[] appWidgetIds) {super.onDeleted(context, appWidgetIds);}@Overridepublic void onDisabled(Context context) {super.onDisabled(context);}@Overridepublic void onEnabled(Context context) {super.onEnabled(context);}@Overridepublic void onReceive(Context context, Intent intent) {super.onReceive(context, intent);String action=intent.getAction();if(UPDATE_ACTION.equals(action)){System.out.println("onReceive--->"+action);}}@Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {//创建一个intent,并设置其actionIntent intent=new Intent();intent.setAction(UPDATE_ACTION);//使用getBroadcast创建一个PendingIntent,并发送广播intentPendingIntent pendingIntent=PendingIntent.getBroadcast(context, 0, intent, 0);RemoteViews remoteViews=new RemoteViews(context.getPackageName(),R.layout.example_appwidget);//设置监听remoteViews.setOnClickPendingIntent(R.id.button, pendingIntent);appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);}}
调用onUpdate发出的广播由onReceive接收。
下面介绍AppWidget和控件的交互。
通过上面的例子可以发现,如果想要达到点击AppWidget的按钮,然后改变AppWidget的控件或内容,可以在onUpdate方法中设置按钮的监听事件:
Intent intent=new Intent();intent.setAction(UPDATE_ACTION);PendingIntent pendingIntent=PendingIntent.getBroadcast(context, 0, intent, 0);RemoteViews remoteViews=new RemoteViews(context.getPackageName(),R.layout.example_appwidget);remoteViews.setOnClickPendingIntent(R.id.button, pendingIntent);appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
然后再onReceive方法中接收Intent,进行控件的交互。
如何接收Intent,然后进行控件的交互呢?
//得到AppWidget的所有控件RemoteViews remoteViews=new RemoteViews(context.getPackageName(),R.layout.example_appwidget);//设置控件的交互效果remoteViews.setTextViewText(R.id.appwidget, "美女变小猫");//得到AppWidgetManagerAppWidgetManager appWidgetManager=AppWidgetManager.getInstance(context);//得到代表整个AppWidget的ComponentComponentName componentName=new ComponentName(context,ExampleAppWidgetProvider.class);//设置更新控件的方法appWidgetManager.updateAppWidget(componentName, remoteViews);
程序实现的效果是:
加载AppWidget,点击按钮前:
点击按钮后:
0 0
- android示例之AppWidget(3)
- android示例之AppWidget(1)
- android示例之AppWidget(2)
- android示例之转载AppWidget
- Android开发之AppWidget应用(一)
- Android开发之AppWidget应用(二)
- Android开发之AppWidget应用(一)
- Android开发之AppWidget应用(二)
- Android开发之AppWidget应用(一)
- (转)Android之appWidget按钮事件
- Android之旅---AppWidget
- Android之初学Appwidget
- Android之旅---AppWidget
- Android之旅---AppWidget
- Android之旅---AppWidget
- Android之旅---AppWidget
- android学习笔记之AppWidget
- Android学习笔记之AppWidget
- Linux下安装Eclipse步骤详解
- 黑马程序员---Java反射机制
- CCProgressTimer(进度条)
- 豌豆荚如何避开移动互联入口争夺锋芒?
- 程序员的11个阶段
- android示例之AppWidget(3)
- 导入Excel数据到ArcGIS属性表
- 自定义异常
- Linux内核配置与编译
- velocity的toolbox使用方法(含与struts2的集成)
- Linux统计文件行数
- python项目练习十:DIY街机游戏
- java类如何装载到虚拟机
- Ubuntu 安装星际译王stardict