安卓开发小知识-AppWidget探索
2016-03-20 13:55
375 查看
在上篇AppWidget入门博文中,我们了解了什么是APPWidget,以及怎样去简单实现一个Widget。该篇我们继续研究下AppWidget的使用方法,及相关细节!
下面是注册代码。
2、探究AppWidget执行过程
AppWidget入门博文中我们知道,从实现一个AppWidget需要有一个负责管理它的类,这个类需要继承android.appwidget.AppWidgetProvider,就让我们去它的源码中一探究竟。
首先,AppWidgetProvider这个类继承于BroadcastReceiver。我们实现一个广播接收器时也需要继承该类,这也可以说明上面的观点。
其次,让我们来看看这个AppWidgetProvider类的onReceive方法,下面为了方便说明,把源码截图出来分析。
分析之前,先让我们看一眼AppWidgetProvider类中扩展的方法。
![](https://img-blog.csdn.net/20160319180203545)
按Ctrl+F12就可以看到啦!
下面再来看看onReceive方法,和上面的图有联系哦!
![](https://img-blog.csdn.net/20160319182109004)
接下来然我们看看具体的回调顺序:
![](https://img-blog.csdn.net/20160319183316706)
![](https://img-blog.csdn.net/20160319183329362)
FrameLayout、LinearLayout、RelativeLayout、GridLayout
2、支持的控件类型:
AnalogClock、Button、Chronometer、ImageButton、ImageView、ProgressBar、TextView、
3、关于AppWidget配置文件中的说明:
updatePeriodMillis(单位毫秒)属性是指定该Widget多久会更新一次,默认值是一天(也就是86400000)更新一次。我们给出的值只是系统的参考值,并不一定严格按照我们给出的值来执行更新。
下面是官方文档给出的说明:
![](https://img-blog.csdn.net/20160320133738285)
当我们给出的值小于60*60*1000时,系统就会忽略了。
这个Activity在配置时需要一个filter
在Widget的配置文件中也要声明:
这样配置之后,在第一次(注意,只是第一次)创建该小控件时,AppWidgetProvider中的onUpdate方法将不会调用,原因是系统不会发出ACTION_APPWIDGET_UPDATE广播,而是将控件的更新权交给了这个Configuration Activity。具体的实现,就交个大家翻阅文档了(多看看官方文档还是很有好处的)。
该篇结束,若有不足,望不吝赐教!
AppWidget是基于系统的BroadCastReceiver机制实现
1、从AppWidget组件在AndroidManifest.xml文件的注册标签的使用上,可以发现实际上是注册了一个广播接收器。下面是注册代码。
<receiver android:name=".ClockWidget"> <!--系统广播过滤器--> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <!--这里我们可以添加自己的filter,来让该Widget相应我们发出的广播--> <!--下面是元数据,说明了接受到广播后使用的相关数据--> <meta-data android:name="android.appwidget.provider" android:resource="@xml/clock_widget_info" /> </receiver>
2、探究AppWidget执行过程
AppWidget入门博文中我们知道,从实现一个AppWidget需要有一个负责管理它的类,这个类需要继承android.appwidget.AppWidgetProvider,就让我们去它的源码中一探究竟。
首先,AppWidgetProvider这个类继承于BroadcastReceiver。我们实现一个广播接收器时也需要继承该类,这也可以说明上面的观点。
其次,让我们来看看这个AppWidgetProvider类的onReceive方法,下面为了方便说明,把源码截图出来分析。
分析之前,先让我们看一眼AppWidgetProvider类中扩展的方法。
按Ctrl+F12就可以看到啦!
下面再来看看onReceive方法,和上面的图有联系哦!
接下来然我们看看具体的回调顺序:
AppWidget使用时注意事项
1、支持的布局方式:FrameLayout、LinearLayout、RelativeLayout、GridLayout
2、支持的控件类型:
AnalogClock、Button、Chronometer、ImageButton、ImageView、ProgressBar、TextView、
3、关于AppWidget配置文件中的说明:
updatePeriodMillis(单位毫秒)属性是指定该Widget多久会更新一次,默认值是一天(也就是86400000)更新一次。我们给出的值只是系统的参考值,并不一定严格按照我们给出的值来执行更新。
下面是官方文档给出的说明:
当我们给出的值小于60*60*1000时,系统就会忽略了。
更高级的使用方法
当我们希望可以改变Widget(比如换个背景之类的)时,需要配置Configuration Activity。这个Activity在配置时需要一个filter
<activity android:name=".ExampleAppWidgetConfigure"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/> </intent-filter> </activity>
在Widget的配置文件中也要声明:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" ... android:configure="com.example.android.ExampleAppWidgetConfigure" ... > </appwidget-provider>
这样配置之后,在第一次(注意,只是第一次)创建该小控件时,AppWidgetProvider中的onUpdate方法将不会调用,原因是系统不会发出ACTION_APPWIDGET_UPDATE广播,而是将控件的更新权交给了这个Configuration Activity。具体的实现,就交个大家翻阅文档了(多看看官方文档还是很有好处的)。
该篇结束,若有不足,望不吝赐教!
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories