本文主要内容包括Android桌面widget、AppWidget开发入门指南,并以简单示例的形式对AppWidget进行直观的讲解。一、Widget、AppWidget、WebApp的概念Widget最初的概念是1998年由一位名叫Rose的苹果工程师提出的,直到2003年才正式为大家所熟知,但随后无数大公司开始接受并应用这个概念。思路。现在我们看到在苹果系统中按F4弹出的Dashboard中的小工具称为Widgets,而在Windows7中侧边栏上的那些漂亮的小工具称为Gadgets(小工具变体?),此外还有yahooWidget和其他Widget产品。它们的共同点之一是使用前端Web开发技术(如HTML、CSS、Javascript)制作的小工具和小部件。在Android系统中,几乎每一个可视化的View组件都被称为Widget,这个名字在当时可能已经很时尚了。AppWidget是Android1.5以后才有的东西,是可以放在Android桌面上的应用程序Widget。从这点来看,它的功能和windows的sidebargadgets很像,可惜它使用的技术不是HTML等技术。当然,AppWidget是我们谈话的主角。它在逻辑上应该被称为Widget,或者至少是Gadget。可惜这个名字已经被他自己的系统占用了,只好改名为AppWidget。***说WebApporAndroidWebApplication,也许手机webapplication更准确。我们发现智能手机系统平台有很多,iOS、Android、WindowsPhone、WebOS、BlackBerry等,它们使用的技术框架也各不相同。有没有办法编写一个可以在所有系统上运行的程序?答案是肯定的,只需要为基于Webkit的浏览器编写一个应用程序即可。我们使用HTML5、CSS3、JavaScript、WebKit等技术编写的WebApplication可能是未来的大趋势。我们有机会谈谈AndroidWeb应用程序的开发。2.AppWidget的一个简单例子:HelloAppWidgetAppWidget的技术实现有点混乱。我们再用最简单的HelloAppWidget例子来操作一下,再对这个例子进行解释,说不定你会理解得更快一些。1.新建工程Lesson35_HelloAppWidget,注意创建时不能选择CreateActivity。2、准备一个Widget显示布局文件layout/widget.xml,内容如下:XML/HTML代码3.准备一个Widget配置文件xml/provider_info.xml,配置widget可以占用的屏幕长宽,更新频率,显示的布局文件(即上面的布局文件)等。其内容如下:XML/HTML代码<!--android:initialLayout组件布局XML位置-->4.准备一个处理widget请求的Java文件,basic.android.lesson35包下的HelloWidgetProvider,它继承了AppWidgetProvider类。在这个例子中,没有具体的请求处理代码。我在java文件里写了很多注释供大家理解内容如下:Java代码包basic.android.lesson35;importandroid.appwidget.AppWidgetManager;importandroid.appwidget.AppWidgetProvider;importandroid.content.Context;importandroid.content.Intent;importandroid.util.Log;//AppWidgetProvider是子类BroadcastReceiver的,本质是一个广播接收器,专门用来接收Widget组件的各种请求(Intent传递过来的),所以如果要给他起名字的话,我会给他取名为AppWidgetReceiver,而且每个Widget都必须有一个AppWidgetProvider。publicclassHelloWidgetProviderextendsAppWidgetProvider{//每个请求都会被传递给onReceive方法,该方法会根据Intent参数中的action类型来决定是处理还是分发给下面四个特殊的方法。@OverridepublicvoidonReceive(Contextcontext,Intentintent){Log.i("yao","HelloWidgetProvider-->onReceive");super.onReceive(context,intent);}//如果Widget的自动更新时间到了,或者其他东西会导致Widget发生change事件,或者Intent的值为android.appwidget.action.APPWIDGET_UPDATE,就会调用onUpdate,下面三个方法类似于@OverridepublicvoidonUpdate(Contextcontext,AppWidgetManagerappWidgetManager,int[]appWidgetIds){//AppWidgetManager,顾名思义就是管理AppWidget桌面上的所有widget,appWidgetIds都会分配一个唯一的ID,那么这个数组就是它们的列表Log.i("yao","HelloWidgetProvider-->onUpdate");super.onUpdate(context,appWidgetManager,appWidgetIds);}//当一个AppWidget从桌面删除时,调用@OverridepublicvoidonDeleted(Contextcontext,int[]appWidgetIds){Log.i("yao","HelloWidgetProvider-->onDeleted");super.onDeleted(context,appWidgetIds);}//这个AppWi时调用dget第一次放在桌面上(同一个AppWidget可以多次放在桌面上,所以会有这个说法)@OverridepublicvoidonEnabled(Contextcontext){Log.i("yao","HelloWidgetProvider-->onEnabled");晚饭er.onEnabled(context);}//当这个AppWidget的最后一个实例从桌面上移除时调用这个方法@OverridepublicvoidonDisabled(Contextcontext){Log.i("yao","HelloWidgetProvider-->onDisabled");super.onDisabled(context);}}5.配置AndroidManifest.xml文件,添加receiver标签,看起来很像前面提到的BroadReceiver配置,具体内容如下:XML/HTML代码</action>6.编译并运行程序。我们知道,这种Widget程序即使安装后也不会出现在程序中。出现在列表中,因为它根本没有主Activity。接下来,我将向不确定如何将小部件放置在桌面上的学生进行解释。在模拟器上长按桌面,等待弹出如下对话框:Selectwidget:选择Hello,AppWidget: