现在的位置: 首页 > 综合 > 正文

Android Widget 设计与开发

2012年09月13日 ⁄ 综合 ⁄ 共 11506字 ⁄ 字号 评论关闭

 

作者:徐建祥(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

 

抱歉!评论已关闭.