Android Widget窗口小部件

1.<meta-data>为组建提供名值对

<meta-data android:name="string"  
  android:resource="resource specification"   android:value="string" />

可定义在<activity><activity-alias> <service><receiver>

一个组件可包含任意多个<meta-data>.

当解析到<meta-data>节点,放入Bundle对象,赋给PackageItemInfo.metaData

ActivityInfo info = getPackageManager().getActivityInfo(new ComponentName(this, MyExcesizeActivity.class), PackageManager.GET_META_DATA);
Bundle bundle = info.metaData;
String name = bundle.getString("com.rytong");
<meta-data android:name="com.rytong" android:resource="@string/liyuejiao"></meta-data>

仅得到@string/liyuejiaoID作为com.rytong的值

2 定义Widget(extends AppWidgetProvider)

Widget被添加,删除时,根据<receive<action android:name=”xx”,系统发出广播,

自己定义的广播接受者MyWidget(extends AppWidgetProvider)接受到广播,调用onEnabled(),onUpdate(),onDeleted(),onDisabled()

<receiver android:name="ExampleAppWidgetProvider" >
  <intent-filter>
    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    <action android:name="android.appwidget.action.APPWIDGET_DELETED" />
  </intent-filter>
  <meta-data android:name="android.appwidget.provider"  android:resource="@xml/example_appwidget_info" />
</receiver>

3 通过<meta-data> android.appwidget.provider这个固定的名字取得Widget的配置文件(指定各项属性)

res/xml/appwidget_info.xml

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
  android:minWidth="294dp"
  android:minHeight="72dp"
  android:updatePeriodMillis="86400000"
  android:previewImage="@drawable/preview"
  android:initialLayout="@layout/example_appwidget"
  android:configure="com.example.android.ExampleAppWidgetConfigure"
  android:resizeMode="horizontal|vertical">
</appwidget-provider>

**

android:updatePeriodMillis定时为广播接受者发送名为”android.appwidget.action.APPWIDGET_UPDATE的发送广播

android1.5以后定为0,不需要定时发送更新广播

android:initialLayout指定默认显示界面

 

4 启动一个服务,在后台长时间运行,不断更新Widget

设为守护线程:当服务所在线程退出,守护线程也退出

 

当桌面上有多个Widget,每一个Widget被删除时,调用onDeleted()

当最后一个Widget被删除时,调用onDeleted(),onDisabled()

在桌面无Widget时,也就是在最后一个Widget被删除时,在onDisabled()中停止服务。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。