开发 android 的桌面小程序 AppWidget

#移动开发 #Android

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 时需要提供的图标和文字,而此例中没有,所以会在加载小控件时报错,需要修改 Android

Manifest.xml 如下: 把 改为

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

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

3. 代码分析

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

以上系统中出问题

  1. Android.mk
    编译规则

  2. src/com/android/tests/appwidgetprovider/TestAppWidgetProvider.java
    实现 AppWidgetProvider(继承自 BroadcastReceiver)或 BroadcastReceiver,在

AppWidget 应用 update, enable, disable 和 deleted 时接受通知。其中 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 成为真正控件。

  1. res/xml/appwidget_info.xml
    AppWidgetProviderInfo: 描述 AppWidget 的大小,更新频率和初始界面等信息,注意 Android 1.6

版本对更新频率支持有问题。

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

  2. 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://cid-f8aecd2a067a6b17.skydrive.live.com/self.aspx/.Public/android/widget^_demo.zip)

(转载请注明出处:http://xy0811.spaces.live.com