展会信息港展会大全

android.appwidget类解析
来源:互联网   发布日期:2015-10-03 10:39:44   浏览:2220次  

导读:随着Android 1.5的普及很多网友发现SDK中多出了appwidget这个框架。作为使用Java语言设计的Widget相比目前主流的W3C Widget有更好的运行效率和底层控制能力,今天我们就Android平台上的Widget开发做主要的讲解......

随着Android 1.5的普及很多网友发现SDK中多出了appwidget这个框架。作为使用Java语言设计的Widget相比目前主流的W3C Widget有更好的运行效率和底层控制能力,今天我们就Android平台上的Widget开发做主要的讲解。

首先我们需要在androidmanifest.xml文件中加入receiver节点来接收系统广播,声明BroadcastReceiver类的方法可以直接使用intent filter来过滤系统信息,下面来自SDK中的写法。

<receiver android:name= TestAppWidgetProviderandroid:label= @string/cwjandroid:icon= @drawable/smart_icon >

<intent-filter>

<action android:name= android.appwidget.action.APPWIDGET_UPDATE/> //这里我们需要捕获的是APPWIDGET_UPDATE这个动作

</intent-filter>

<meta-data android:name= android.appwidget.providerandroid:resource= @xml/appwidget_info/> //定义meta数据,见下面的appwidget-provider

</receiver>

我们定一个AppWidgetProviderInfo 结构,用来描述这个widget的外观,这里和layout的布局有些相似,可以设置最小的宽度为40dp,最小高度为30dp。

<appwidget-provider xmlns:android= http://schemas.android.com/apk/res/androidandroid:minWidth= 40dp

android:minHeight= 30dp

android:updatePeriodMillis= 86400000//回调Timer,单位为毫秒。这里是1天=60X60X24X1000,Android手机的电能有限,频率不能太高,最好让用户自己控制

android:initialLayout= @layout/test_appwidget//初始化时的主要布局

android:configure= com.android.tests.appwidgethost.TestAppWidgetConfigure>

</appwidget-provider>

在Widget中主要使用AppWidgetProvider做基类,刚才我们定义的BroadcastReceiver主要是更新动作 ACTION_APPWIDGET_UPDATE ,与此之外还有ACTION_APPWIDGET_DELETED、ACTION_APPWIDGET_ENABLED和 ACTION_APPWIDGET_DISABLED分别表示删除是、启用和禁用时触发的事件,这里是系统广播。我们通过 BroadcastReceiver类的onReceive方法来捕获。

下面的Java广播动作获取代码如下:

public void onReceive(Context context, Intent intent) {

String action = intent.getAction(); //获取当前的动作

if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) { //如果是ACTION_APPWIDGET_UPDATE动作则

Bundle extras = intent.getExtras();

if (extras != null) {

int[] appWidgetIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);

if (appWidgetIds != null && appWidgetIds.length > 0) {

this.onUpdate(context, AppWidgetManager.getInstance(context), appWidgetIds);

}

}

}

else if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) { //动作2

Bundle extras = intent.getExtras();

if (extras != null) {

int[] appWidgetIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);

if (appWidgetIds != null && appWidgetIds.length > 0) {

this.onDeleted(context, appWidgetIds);

}

}

}

else if (AppWidgetManager.ACTION_APPWIDGET_ENABLED.equals(action)) { //动作3

this.onEnabled(context);

}

else if (AppWidgetManager.ACTION_APPWIDGET_DISABLED.equals(action)) { //动作4

this.onDisabled(context);

}

}

本文我们主要简单的讲述下Android平台Widget的框架,以后我们将会通过实际的例子来讲解,我们看到这里的widget和常见的 iphone上 dashboard等w3c使用html+js以ajax方式的小工具不太一样,不过整体开发起来比android标准的程序更简单,主要是考虑ui的绘 制以及网络通讯,推荐大家多看看apache通讯类。

赞助本站

人工智能实验室

相关热词: appwidget

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港