您的位置:华清远见教育科技集团 >> Android资料 >> Android App Widgets开发  
 
Android App Widgets开发
分享到:

App Widgets在Android中是作为嵌入到其他应用中的小的应用视图存在的,这在进行背景音乐播放、社交网络信息浏览、天气状况查询、交通状况查询等需要定期更新的业务时显得非常有用。驻留了App Widgets的应用组件称为App Widgets宿主。

为了创建一个App Widget,开发者需要完成3个方面的工作:

1)定义AppWidgetProviderInfo对象

定义一个AppWidgetProviderInfo对象。为了描述App Widget的属性,如布局、刷新频率和AppWidgetProvider,需要在XML文件中定义一个AppWidgetProviderInfo对象。

下面是samples\ApiDemos\res\xml\appwidget_provider.xml中的一个例子:

代码1-1 appwidget_provider.xml

< appwidget-provider xmlns:android="//schemas.android.com/apk/res/android"
      android:minWidth="60dp"
      android:minHeight="30dp"
      android:updatePeriodMillis="86400000"
      android:initialLayout="@layout/appwidget_provider"
      android:configure="com.example.android.apis.appwidget.ExampleAppWidgetConfigure">
    < /appwidget-provider>

在samples\ApiDemos\ AndroidManifest.xml中,通过receiver::Resource属性设置数据源:

代码1-2 AndroidManifest.xml

< receiver android:name=".appwidget.ExampleAppWidgetProvider">
        < meta-data android:name="android.appwidget.provider" //组件名
            android:resource="@xml/appwidget_provider" /> //数据源
        < intent-filter>
            < action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        < /intent-filter>
    < /receiver>

2)重载App Widget接口

重载App Widget的基本接口,如AppWidgetProvider:: onUpdate()、AppWidgetProvider:: onDeleted ()、AppWidgetProvider:: onEnabled ()、AppWidgetProvider:: onDisabled ()等,实现可参考ExampleAppWidgetProvider.java。

3)定义App Widget的布局

定义App Widget的初始布局,如samples\ApiDemos\res\layout\ appwidget_configure.xml、samples\ApiDemos\res\layout\appwidget_provider.xml等。

另外,为了显示App Widget,需要创建一个Activity,在实际的开发中,App Widget通常位于Home Screen中。需要注意的是,由于App Widget和数据源通常位于不同的进程中,为了更新数据,需要用到RemoteViews类。

代码1-3 updateAppWidget

static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,int appWidgetId, String titlePrefix)
    {
      Log.d(TAG, "updateAppWidget appWidgetId="+appWidgetId+"titlePrefix="+ titlePrefix);
      //通过getString()有利于字符串的本地化,可以通过java.util.Formatter提供格式字符串
      CharSequence text=context.getString(R.string.appwidget_text_format,
      ExampleAppWidgetConfigure.loadTitlePref(context, appWidgetId),
            "0x"+Long.toHexString(SystemClock.elapsedRealtime()));
      RemoteViews views=new RemoteViews(context.getPackageName(), R.layout.appwidget_ provider); //创建RemoteViews
      views.setTextViewText(R.id.appwidget_text, text);
      appWidgetManager.updateAppWidget(appWidgetId, views); //通知Widget管理器
    }

App Widgets涉及的类包括android.appwidget.AppWidgetHost、android.appwidget. AppWidget HostView、android.appwidget.AppWidgetManager、android.appwidget.AppWidget Provider、android.appwidget.AppWidgetProviderInfo等。

 更多相关文章

·Android Intent激活组件
·Android Broadcast的使用
·详解Android Service组件
·Android应用组件Activity
·Android RPC管道文件系统