1.          什么是AppWidget
Android
系统允许某个应用把它自己的控件嵌入到其它的应用之中,这些被嵌入的控件就是”widget”,发布控件的应用是”:appwidget providers”,而合成控件并显示的应用是
”AppWidget host”.
widget
常被译作小应用,小控件,小部件。最常见的widget是显示在桌面上时钟,日历,搜索,相框,音乐等,使用户不用进入应用,就可以方便地使用某种功能。桌面也是一个应用程序(packages/apps/Launcher),代码中实现了”AppWidget host”,而时钟,日历是分别实现了不同功能的”appwidget provider”packages/apps/Calendar

2.          建立第一个AppWidget
长篇大论不如立竿见影地看到效果,用以下方法,建立你的第一个
widget
$ cd $ANDROID_SRC/development
$ cp $ANDROID_SRC/frameworks/base/tests/appwidgets/AppWidgetProviderTest MyWidget -R
$ cd MyWidget
$ mm
$ adb install $ANDROID_SRC/out/target/product/qsd8250_surf/system/app/AppWidgetProvider.apk
注意:

1)         android 2.1因为加载widget时需要提供的图标和文字,而此例中没有,所以会在加载小控件时报错,需要修改Androidanifest.xml如下:
改为

并在drawable下放icon.png,作为出现在小控件列表中的图标

2)         不能全部ANDROID代码一起编,否则会因为类重名而报错
只编此项目没有问题,把文件名,目录名,类名等都改成你定义的名字即可全编

3.          代码分析

1)         AndroidManifest.xml
主要描述由哪个AppWidgetProvider提供Widget,最好在其中加入图标和名字,以免android 2.0以上系统中出问题

2)         Android.mk
编译规则

3)         src/com/android/tests/appwidgetprovider/TestAppWidgetProvider.java
实现AppWidgetProvider(继承自BroadcastReceiver)或BroadcastReceiver,在AppWidget应用update, enable, disabledeleted时接受通知。其中onUpdate()(或onReceive()中的UPDATE部分)最重要的方法,由它接受通知并更新,一般实现如下:

ComponentName thisWidget = new ComponentName(context, MyProvider.class);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteView views = new RemoteViews(context.getPackageNmae(), R.layout.provider) //
设定布局;
appWidgetManager.updateAppWidget(thisWidget, views); //
请求widgethost刷新

真正的刷新在widgethost所在应用中实现(AppWidgetHostView.updateAppWidget()),即在widgetprovider中只做描述,而在widgethost中把描述的资源inflate成为真正控件。

4)         res/xml/appwidget_info.xml
AppWidgetProviderInfo:
描述AppWidget的大小,更新频率和初始界面等信息,注意Android 1.6版本对更新频率支持有问题。

5)         res/layout/xxxx.xml
widget
的布局文件

6)         res/values/strings.xml
widget
中使用到的字串

4.          说明

1)         设置界面
有时需要设置界面(configure activity)在第一次运行前被调出,用于设置AppWidget,它在res/xml/xxx.xml中设定,示例代码见:
$ANDROID_SRC/development/samples/ApiDemos/src/com/example/android/apis/appwidget/

5.          参考代码

1)         market下了几个电量显示控件,觉得不是太大就是太小,太难看,要不就是更新有问题……,于是做了一个Widget,截取了iphone的电池控件图标,大小与icon一致,仅供学习参考,代码及apk下载地址:
http://cid-f8aecd2a067a6b17.skydrive.live.com/self.aspx/.Public/android/widget^_demo.zip

 

(转载请注明出处: http://xy0811.spaces.live.com
posted on 2010-06-02 12:25  xieyan0811  阅读(23)  评论(0编辑  收藏  举报