对于AppWidget,是通过RemoteView,使用PendingIntent进延迟启动的方式来绑定需要启动的应用,基本的使用方式可以参考http://www.cnblogs.com/qianlifeng/archive/2011/03/26/1996407.html的博客,介绍了布局的建立,关联,初步使用方式。
这种使用方式满足基本的简单APPWIDGET控件的使用方式,当小部件需要使用到较复杂的控件,如ListView,GroupView等需要使用Adapter的控件时,就需要比较复杂的构造方式了,具体实现参考:http://jingpin.jikexueyuan.com/article/55759.html
这里要注意:
1、onReceive():这个方法有两个作用,一是处理自定义的ACTION事件(可选),二是处理APPWIDGET控件的回调事 件(必选,从AppWidgetProvider中可以看出,onUpdate, onDelete等回调方法都是从onReceive方法进行分发事件),所以在继承的应用的各自AppWidgetProvider中的onReveive方法中都有调用
else supe.onReceive();
2、构造AppWidget控件的初始化,PengdingIntent的过程一般放在onUpdate方法中进行,是因为这个方法只有在Launcher中实例小部件的时候由onReceive进行分发的时候执行一次。
3、对一般的简单AppWidget,使用的remoteViews.setOnClickPendingIntent(),进行注册响应事件;
对复杂的AppWidget,使用的remoteViews.setPendingIntentTemplate(),同时在RemoteViewsService的子类方 法getViewAt()方法中,对list-item再用remoteViews.setOnClickFillInIntent()进行注册一次。
4、对于ListView的数据更新,需要在数据发生变化的时候进行广播,这样就可以在onReceive方法中进行捕获事件进 行处理,调用appWidgetManager.notifyAppWidgetViewDataChanged(),再回调RemoteViewsService的 onDataSetChanged方法,在这个方法里进行相关的数据查询,处理,更新UI时可以采用系统 API: mAppWidgetManager.partiallyUpdateAppWidget(),这时就可以将数据更新到UI上。
具体的例子可以参照Android6.0的Messaging中的小部件。