作者:徐建祥(netpirate@gmail.com)
时间: 2010/12/15
来自: http://www.anymobile.org
Widget杂谈:最早Widget是指在PC的桌面上的小窗口程序;Web上的先行者似乎是Yahoo!;当然,OPhone也搞了一套Widget,HTML+CSS的东东。
我们这里谈的所谓Widget,就是窗口小部件,Android SDK从1.5版本开始支持AppWidget framework,返个框架允许开发者开发Widgets,这些Widgets可以被用户通过长按桌面进行添加,与应用程序进行数据交互。
需求:
在桌面上开发一个Widget,可以实时显示IM软件的状态更新变化;可以通过左右按钮,查看上次或下调更新内容。
(参考效果图)
设计思路:
(参考设计序列图)
代码:
Java:
/src/org.anymobile.demo.Globals //Intent.action 声明
/src/org.anymobile.demo.service.UpdateService extends Service //同步、更新Widget布局数据的Service
/src/org.anymobile.demo.widget.UpdateAppWidgetProvider extends AppWidgetProvider //Widget,接收器
XML:
/res/layout/update_appwidget.xml //布局设计
/res/values/strings.xml //常量声明
/res/xml/update_appwidget_info.xml //app widget定义
AndroidManifest.xml
#AndroidManifest.xml
#strings.xml
#update_appwidget_info.xml
#update_appwidget.xml
#Globals.java
#UpdateService.java
#UpdateAppWidgetProvider.java
日志:
#init
12-15 19:23:09.479 D/ANYMOBILE-DEMO--UpdateAppWidgetProvider( 585): onReceive() android.appwidget.action.APPWIDGET_UPDATE
12-15 19:23:09.509 D/ANYMOBILE-DEMO--UpdateAppWidgetProvider( 585): onUpdate()
12-15 19:23:09.549 D/ANYMOBILE-DEMO--UpdateService( 585): onCreate()
12-15 19:23:09.579 D/ANYMOBILE-DEMO--UpdateService( 585): onStart()
#add widget
12-15 19:24:23.780 D/ANYMOBILE-DEMO--UpdateAppWidgetProvider( 585): onReceive() android.appwidget.action.APPWIDGET_UPDATE
12-15 19:24:23.780 D/ANYMOBILE-DEMO--UpdateAppWidgetProvider( 585): onUpdate()
12-15 19:24:23.850 D/ANYMOBILE-DEMO--UpdateService( 585): onStart()
#receive software event, reload and update widget
12-15 19:24:58.150 D/ANYMOBILE-DEMO--UpdateService( 585): onReceive() Activation
12-15 19:24:58.150 D/ANYMOBILE-DEMO--UpdateService( 585): doReload()
12-15 19:24:58.150 D/ANYMOBILE-DEMO--UpdateService( 585): notifyWidget()
12-15 19:24:58.200 D/ANYMOBILE-DEMO--UpdateService( 585): buildUpdate: layoutId = 2130903068; count = 11; id = 0
#click widget button, new start the bind service
12-15 19:25:49.260 D/ANYMOBILE-DEMO--UpdateService( 585): onStart()
12-15 19:24:58.150 D/ANYMOBILE-DEMO--UpdateService( 585): notifyWidget()
12-15 19:24:58.200 D/ANYMOBILE-DEMO--UpdateService( 585): buildUpdate: layoutId = 2130903068; count = 11; id = 0
OVER!
参考:
com.android.music/.MediaAppWidgetProvider
com.android.music/.MediaPlaybackService