有代做关于手机fancy widgett应用程序开发毕业设计的朋友吗?只...

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
关于BUIW机制的手机应用程序设计与实现.pdf68页
本文档一共被下载:
次 ,您可免费全文在线阅读后下载本文档
文档加载中...广告还剩秒
需要金币:200 &&
优秀硕士毕业论文,完美PDF格式,可在线免费浏览全文和下载,支持复制编辑,可为大学生本专业本院系本科专科大专和研究生学士硕士相关类学生提供毕业论文范文范例指导,也可为要代写发表职称论文的提供参考!!
你可能关注的文档:
··········
··········
手机已经成为人们日常生活中必不可少的工具之一。随着科技的发展,人们
对手机的要求也越来越高,而传统的手机应用软件开发具有周期长、难度大、可
的接口,封装并扩展了BUIW的函数,很好的解决了上面的问题。
本文阐述了课题研究的背景和意义,分析BREW平台在国内外的影响,说明了
构,内部软件结构以及BUIW机制,研究了BUIW的组成、特点和基本架构流程,
日程模块的软件实现方案,包括整体的系统设计、需求分析、概要设计、模块的
详细设计与实现以及界面设计等。
论文最后,对所设计的模块进行了全面的测试,并总结了整个开发实现过程
中遇到的问题及最终成果,对WCDMA手机软件开发平台的进一步发展方向进行
软件系统中,并取得了良好的使用效果。
关键词:BREW
inour life.Withthe
Mobile havebecomeoneof essentialtools
rapiddevelopment technology,theusers’requirements
havebecomemore
oftraditional
sophisticated,whiledevelopment
long,difficultportable.neproject
Qualcomm’S
phoneapplication
extendstheBREW
andextendsBUIW
interface,packages
正在加载中,请稍后...您所在的位置: &
Android开发中的窗口小部件App Widget
Android开发中的窗口小部件App Widget
Widget开发有很多值得学习的地方,这里向大家简单介绍一下Android开发指南-窗口小部件App Widgets ,希望本文介绍对你有所帮助。
本文和大家重点讨论一下Android开发指南-窗口小部件App Widgets ,应用程序窗口小部件Widget开发是微小的应用程序视图,可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新。
Android开发指南-窗口小部件App Widgets
应用程序窗口小部件App Widgets
应用程序窗口小部件Widget开发是微小的应用程序视图,可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新。你可以通过一个App Widget provider来发布一个Widget。可以容纳其它App Widget的应用程序组件被称为App Widget宿主。下面的截屏显示了一个音乐App Widget。
这篇文章描述了如何使用App Widget Provider发布一个App Widget。
The Basics为了创建一个App Widget,你需要下面这些:
AppWidgetProviderInfo 对象
描述一个App Widget元数据,比如App Widget的布局,更新频率,以及AppWidgetProvider 类。这应该在XML里定义。
AppWidgetProvider 类的实现
定义基本方法以允许你编程来和App Widget连接,这基于广播事件。通过它,当这个App Widget被更新,启用,禁用和删除的时候,你都将接收到广播通知。
为这个App Widget定义初始布局,在XML中。
另外,你可以实现一个App Widget配置活动。这是一个可选的活动Activity,当用户添加App Widget时加载并允许他在创建时来修改App Widget的设置。
下面的章节描述了如何建立这些组件:
在清单中声明一个应用小部件
首先,在应用程序AndroidManifest.xml文件中声明AppWidgetProvider 类,比如:
复制到剪贴板& XML/HTML代码
&android:name=&ExampleAppWidgetProvider&&&&& &&&& &&&&&&&& &&&& &&&&&&&&&&android:name=&android.appwidget.action.APPWIDGET_UPDATE&&&&& &&&& &&&&&&&& &&&& &&&&&&android:name=&android.appwidget.provider&&&& &&&& &&&&&&&&&&&&&&&&android:resource=&@xml/example_appwidget_info& &&src=&http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js&&type=&text/javascript&&&srcsrc=&http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js&&type=&text/javascript&&&&&&& &&&& &&&&
&receiver&元素需要Android:name属性,它指定了App Widget使用的AppWidgetProvider 。
&intent-filter& 元素必须包括一个含有android:name属性的&action&元素。该元素指定AppWidgetProvider接受ACTION_APPWIDGET_UPDATE 广播。这是唯一你必须显式声明的广播。当需要的时候,AppWidgetManager 会自动发送所有其他App Widget广播给AppWidgetProvider。
&meta-data& 元素指定了AppWidgetProviderInfo 资源并需要以下属性:
◆android:name & 指定元数据名称。
◆android:resource & 指定AppWidgetProviderInfo 资源路径。
增加AppWidgetProviderInfo元数据
AppWidgetProviderInfo定义一个App Widget的基本特性,比如最小布局尺寸,初始布局资源,刷新频率,以及(可选的)创建时加载的一个配置活动。使用单独的一个&appwidget-provider&元素在XML资源里定义AppWidgetProviderInfo 对象并保存到项目的res/xml/目录下。
复制到剪贴板& XML/HTML代码
&xmlns:android=&/apk/res/android&&&& &&&& &&&&&android:minWidth=&294dp&&&&& &&&& &&&&&android:minHeight=&72dp&&&& &&&& &&&&&android:updatePeriodMillis=&&&&&& &&&& &&&&&android:initialLayout=&@layout/example_appwidget&&&& &&&& &&&&&android:configure=&com.example.android.ExampleAppWidgetConfigure&&&&& &&&& &&& &&
下面是&appwidget-provider&属性的总结:
◆minWidth 和minHeight 属性的值指定了这个App Widget布局需要的最小区域。
缺省的App Widgets所在窗口的桌面位置基于有确切高度和宽度的单元网格。如果App Widget的最小长宽和这些网格单元的尺寸不匹配,那么这个App Widget将收缩到最接近的单元尺寸。(参见App Widget Design Guidelines 以获取更多关于桌面单元尺寸的信息)
因为桌面布局方向(由此,单元的尺寸)可以变化,按照拇指规则,你应该假设最坏情况单元尺寸是74像素高和宽。不过,你必须从最后的尺寸中减去2以把像素计算过程中产生的任何的整数舍入误差考虑在内。要找到像素密度无关的最小宽度和高度,使用这个公式:
(number of cells * 74) - 2
遵循这个公式,你应该使用72dp为每一个单元高度,294dp为四个单元宽度。
◆updatePerdiodMillis 属性定义了App Widget框架调用onUpdate()方法来从AppWidgetProvider请求一次更新的频度。实际更新时间并不那么精确,而且我们建议更新频率越低越好-也许每小时不超过一次以节省电源。你也许还会允许用户在配置中调整这个频率-一些人可能想每15分钟一次股票报价,或者一天只要四次。
◆initialLayout属性指向定义App Widget布局的资源。
◆configure属性定义了Activity ,当用户添加App Widget时启动,以为他或她配置App Widget特性。这是可选的(阅读下面的Creating an App Widget Configuration Activity)。
参见AppWidgetProviderInfo 类以获取更多可以被&appwidget-provider&元素接受的属性信息。
创建App Widget开发布局
你必须在XML中为你的App Widget定义一个初始布局并保存到项目的res/layout/ 目录下。你可以使用如下所列的视图对象来设计你的App Widget,但是在此之前,请先阅读并理解App Widget Design Guidelines.
如果你熟悉在XML中声明布局,那么创建这个App Widget布局是很简单的。但是,你必须意识到那个App Widget布局是基于RemoteViews, 这并不支持所有类型的布局或视图小部件。
一个RemoteViews对象(以及,相应的,一个App Widget)可以支持下面这个布局类:
以及下面的小部件类:
◆FrameLayout
◆LinearLayout
◆RelativeLayout
◆AnalogClock
◆Chronometer
◆ImageButton
◆ImageView
◆ProgressBar
◆TextView
不支持这些类的派生。
使用AppWidgetProvider类
你必须通过在清单文件中使用&receiver&元素来声明你的AppWidgetProvider 类实现为一个广播接收器(参见上面的Declaring an App Widget in the Manifest)。
AppWidgetProvider 类扩展BroadcastReceiver 为一个简便类来处理App Widget广播。AppWidgetProvider只接收和这个App Widget相关的事件广播,比如这个App Widget被更新,删除,启用,以及禁用。当这些广播事件发生时,AppWidgetProvider 将接收到下面的方法调用:
onUpdate(Context, AppWidgetManager, int[])
这个方法调用来间隔性的更新App Widget,间隔时间用AppWidgetProviderInfo 里的updatePeriodMillis属性定义(参见添加AppWidgetProviderInfo元数据)。这个方法也会在用户添加App Widget时被调用,因此它应该执行基础的设置,比如为视图定义事件处理器并启动一个临时的服务Service,如果需要的话。但是,如果你已经声明了一个配置活动,这个方法在用户添加App Widget时将不会被调用,而只在后续更新时被调用。配置活动应该在配置完成时负责执行第一次更新。(参见下面的创建一个App Widget配置活动Creating an App Widget Configuration Activity。)
onDeleted(Context, int[])
当App Widget从宿主中删除时被调用。
onEnabled(Context)
当一个App Widget实例第一次创建时被调用。比如,如果用户添加两个你的App Widget开发实例,只在第一次被调用。如果你需要打开一个新的数据库或者执行其他对于所有的App Widget实例只需要发生一次的设置,那么这里是完成这个工作的好地方。
onDisabled(Context)
当你的App Widget的最后一个实例被从宿主中删除时被调用。你应该在onEnabled(Context)中做一些清理工作,比如删除一个临时的数据库。
onReceive(Context, Intent)
这个接收到每个广播时都会被调用,而且在上面的回调函数之前。你通常不需要实现这个方法,因为缺省的AppWidgetProvider 实现过滤所有App Widget 广播并恰当的调用上述方法。
注意: 在Android 1.5中, 有一个已知问题,onDeleted()方法在该调用时不被调用。为了规避这个问题,你可以像Group post中描述的那样实现onReceive() 来接收这个onDeleted()回调。
最重要的AppWidgetProvider 回调函数是onUpdated(), 因为它是在每个App Widget添加进宿主时被调用的(除非你使用一个配置活动)。如果你的App Widget 要接受任何用户交互事件,那么你需要在这个回调函数中注册事件处理器。如果你的App Widget不创建临时文件或数据库,或者执行其它需要清理的工作,那么onUpdated() 可能是你需要定义的唯一的回调函数。比如,如果你想要一个带一个按钮的App Widget,当点击时启动一个活动,你可以使用下面的AppWidgetProvider实现:
public&class&ExampleAppWidgetProvider&extends&AppWidgetProvider&{&&&& &&&&&&&&& &&&&&public&void&onUpdate(Context&context,&AppWidgetManager&appWidgetManager,&int[]&appWidgetIds)&{&&&& &&&& &&&&&&&&&final&int&N&=&appWidgetIds.&&&& &&&&&&&& &&&& &&&&&&&&&//&Perform&this&loop&procedure&for&each&App&Widget&that&belongs&to&this&provider&&&& &&&& &&&&&&&&&for&(int&i=0;&i;&i++)&{&&&& &&&& &&&&&&&&&&&&&int&appWidgetId&=&appWidgetIds[i];&&&& &&&& &&&&&&&&& &&&&&&&&&&&&&//&Create&an&Intent&to&launch&ExampleActivity&&&& &&&& &&&&&&&&&&&&&Intent&intent&=&new&Intent(context,&ExampleActivity.class);&&&& &&&& &&&&&&&&&&&&&PendingIntent&pendingIntent&=&PendingIntent.getActivity(context,&0,&intent,&0);&&&& &&&& &&&&&&&&&&&&&&&&&&&&&//&Get&the&layout&for&the&App&Widget&and&attach&an&on-click&listener&to&the&button&&&& &&&& &&&&&&&&&&&&&RemoteViews&views&=&new&RemoteViews(context.getPackageName(),&R.layout.appwidget_provider_layout);&&&& &&&& &&&&&&&&&&&&&views.setOnClickPendingIntent(R.id.button,&pendingIntent);&&&& &&&& &&&&&&&&& &&&&&&&&&&&&&//&Tell&the&AppWidgetManager&to&perform&an&update&on&the&current&App&Widget&&&& &&&& &&&&&&&&&&&&&appWidgetManager.updateAppWidget(appWidgetId,&views);&&&& &&&&&&&&&&&&}&&&&&&& &&&&&}&&&&&&& &}&&&&
这个AppWidgetProvider 仅定义了onUpdated() 方法,为了定义一个PendingIntent,来启动一个活动并使用setOnClickPendingIntent(int, PendingIntent)方法把它附着到这个App Widget的按钮上。注意它包含了一个遍历appWidgetIds中所有项的循环,这是一个IDs数组,每个ID用来标识由这个Provider创建的一个App Widget。这样,如果用户创建多于一个这个App Widget的实例,那么它们将被同步更新。不过,对于所有的App Widget实例,只有一个updatePeriodMillis 时间表被管理。比如,如果这个更新时间表被定义为每隔两个小时,而且App Widget的第二个实例是在第一个后面一小时添加的,那么它们将按照第一个所定义的周期来更新而第二个被忽略(它们将都是每2个小时进行更新,而不是每小时)。
注意: 因为这个AppWidgetProvider 是一个广播接收器BroadcastReceiver,不能保证你的进程在回调函数返回后仍然继续运行(参见应用程序基础&广播接收器的生命周期Application Fundamentals & Broadcast Receiver Lifecycle以获取更多信息)。如果你的App Widget设置过程能持续几秒钟(也许当执行网页请求时)而且你要求你的进程继续,考虑在onUpdated()方法里启动一个服务Service 。从这个服务里,你可以执行自己的App Widget更新,而不必担心AppWidgetProvider 由于一个应用程序无响应错误Application Not Responding (ANR)而关闭。参见Wiktionary sample's AppWidgetProvider,这是个App Widget运行一个Service的例子。
同样参见ExampleAppWidgetProvider.Java 例子类。
接收App Widget广播意图
AppWidgetProvider 只是一个简便类。如果你想直接接收App Widget 广播,你可以实现自己的BroadcastReceiver 或者重写 onReceive(Context, Intent) 回调函数。你需要注意的4个意图如下:
◆ACTION_APPWIDGET_UPDATE
◆ACTION_APPWIDGET_DELETED
◆ACTION_APPWIDGET_ENABLED
◆ACTION_APPWIDGET_DISABLED
创建一个App Widget 配置活动
如果你想让用户在添加一个新的App Widget时调整设置,你可以创建一个App Widget开发配置活动。这个活动将被App Widget宿主自动启动并允许用户在创建时配置可用的设置,比如App Widget颜色,尺寸,更新周期或者其它功能设置。
这个配置活动应该在Android清单文件中声明为一个通用活动。不过,它将被通过ACTION_APPWIDGET_CONFIGURE活动而被App Widget宿主启动,因此这个活动需要接受这个意图。比如:
&android:name=&.ExampleAppWidgetConfigure&&&&& &&&& &&&&&&&&& &&&& &&&&&&&&&&android:name=&android.appwidget.action.APPWIDGET_CONFIGURE&&&&&& &&&& &&&&&&&&& &&&& &&&& &&
同样的,活动必须在AppWidgetProviderInfo XML 文件中声明,通过android:configure属性(参见上面的添加AppWidgetProviderInfo元数据Adding the AppWidgetProviderInfo Metadata)。比如,配置活动可以声明如下:
&xmlns:android=&/apk/res/android&&&& &&&&&&&&...&&&& &&&&&&&android:configure=&com.example.android.ExampleAppWidgetConfigure&&&&&& &&&&&&&&...&&&&& &&&&&&&& &&& &&
注意这个活动是用全名声明的,因为它将从你的程序包外被引用。
这就是所有关于配置活动你一开始需要了解的。现在你需要一个真实的活动。这儿就有,不过,当你实现这个活动时记住两件重要的事情:
◆& App Widget 宿主调用配置活动而且配置活动应该总是返回一个结果.这个结果应该包含这个通过启动该活动的意图传递的App Widget ID(以EXTRA_APPWIDGET_ID保存在意图的附加段Intent extras中)
◆& 当这个 App Widget 被创建时将不会调用onUpdate() 方法(当一个配置活动启动时,系统将不会发送ACTION_APPWIDGET_UPDATE广播).配置活动应该在 App Widget 第一次被创建时负责从AppWidgetManager请求一个更新.不过, onUpdate() 将在后续更新中被调用-只忽略第一次.
参见下面章节的代码片断,该示例说明了如何从配置中返回一个结果并更新这个App Widget.
从配置活动中更新一个App Widget
当一个App Widget使用一个配置活动,那么当配置结束时,就应该由这个活动来更新这个App Widget.你可以直接AppWidgetManager里请求一个更新来这么做.
下面是恰当的更新App Widget 以及关闭配置活动这个过程的一个概要描述:
1,首先,从启动这个活动的意图中获取App Widget ID:
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null) {
&&& mAppWidgetId = extras.getInt(
&&&&&&&&&&& AppWidgetManager.EXTRA_APPWIDGET_ID,
&&&&&&&&&&& AppWidgetManager.INVALID_APPWIDGET_ID);
2,实施你的App Widget开发配置。
3,当配置完成后,通过调用getInstance(Context)获取一个AppWidgetManager实例:
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
4,以一个RemoteViews布局调用updateAppWidget(int, RemoteViews)更新App Widget:
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget);
appWidgetManager.updateAppWidget(mAppWidgetId, views);
5,最后,创建返回意图,设置活动结果,并结束这个活动:
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK, resultValue);
提示: 当你的配置活动第一次打开时,设置活动结果为RESULT_CANCELED。这样,如果用户在结束之前从活动外返回,这个App Widget 宿主会接收到配置取消通知而不会添加这个App Widget。参见ApiDemos里面的ExampleAppWidgetConfigure.java 例子。
【编辑推荐】
【责任编辑: TEL:(010)】
关于的更多文章
在移动终端上运行的Widget被称为“Mobile Widget”。Mobile Widg
既然强大的Android Studio来了,有什么理由不去用呢?
对于设计师来说,扁平化设计是一种实打实的设计风格,
BYOD(Bring Your Own Device)指携带自己的设备办公
在Android开发中,优化,是一直困扰开发者的一个难题
Python是目前流行的脚本语言之一。本书由浅入深、循序渐进地讲解如何使用Python进行程序开发。全书内容包括Python安装、开发工具
Windows Phone专家
Android开发专家
51CTO旗下网站您所在的位置: &
全面认识Web Widget开发
全面认识Web Widget开发
Widget开发有很多值得学习的地方,这里介绍一下什么是WEBWidget开发,WebWidget开发是轻量级的Web应用程序,为使用者提供一键式的服务。
本文和大家重点学习一下WebWidget开发概述,WebWidget开发是轻量级的Web应用程序,为使用者提供一键式的服务。它通常被设计为具有特定的功能,如提供天气、股票、拍卖等的信息。
WebWidget开发概述
移动互联网的兴起
移动通讯的商业环境正在面临快速变化。一个重要表现是,人们的工作、生活越来越多地倚赖于Internet,例如大量涌现的Web2.0网站、网络社区。同时,人们对Internet的需求也越来越多样化。如何把移动通讯与Internet结合起来,无论对于移动终端制造商还是Internet服务提供商,都是一个新的有趣的挑战。
现在在移动设备上访问Internet,不如在PC上访问方便,并且支持的Web能力也有限。针对这个问题,目前有两种主要的解决方案,即服从于Web和服从于PC的解决方案。S60的浏览技术属于后者,致力于在移动设备上提供类似于PC的浏览体验。而通过PC访问Internet,则不如通过移动设备那样,有方便、快捷的网络接入。此外,统计数字显示了网站访问存在的&二八&现象,即人们频繁访问的只有少数网站。针对以上问题,S60SDK3rdEditionFeaturePack2中推出了相应的解决方案----WebWidget(以下简称Widget)。
随着Widget开发的推广,在不久的将来,人们将可以随时随地访问Internet,就象今天人们打电话一样容易。
什么是WEBWidget开发
WebWidget开发是轻量级的Web应用程序,为使用者提供一键式的服务。它通常被设计为具有特定的功能,如提供天气、股票、拍卖等的信息。它与网页一样,使用标准的Web技术开发,如XHTML,CSS,javascript等。从这方面看,Widget是脱离浏览器UI运行的网页。
与其它S60应用相比,Widget可以通过相同的方式下载、安装到手机上。这使它非常易于分享。
Widget的运行基于WebRun-time(以下简称WRT)。WRT是S60SDK3rdEditionFeaturePack2中,新增加的浏览器组件。它是一个Web应用开发环境。
访问以下链接可以获得更多关于Widget的信息,[url]http://www./main/resources/technologies/browsing/widgets.html。[/url]
体验Widget
Widget的使用方式与S60本地应用一样。作为Widget的运行平台,WRT设计目标之一就是使Widget与S60平台进行无缝集成,给用户一致的使用体验。例如,每个Widget都可以在应用程序菜单中显示图标;可被设置为待机状态下的快捷键和左右软键;能出现在活动应用列表中;具有与现有的S60应用一样的管理方式,如安装,卸载。
如下链接展示了Widget的安装和使用的一段视频,[url]http://www./info//id/4e20baf8-4c58-4d36-be9f-798a168a844d/Web_widget_webinar_zh_Ch.swf.html。[/url]
安装Widget
如上所述,Widget的管理方式与S60本地应用一样。如果了解S60本地应用的安装,就可以顺利地安装Widget。现在支持Widget的手机有最新版软件的NokiaN95以及N958G,以及即将上市的所有S603rdEditionFP2手机。
通过链接http://discussion./forum/showthread.php?t=,可以下载一些Widget例子。
Widget以安装包的形式发布。一个安装包就是一个扩展名为.wgz的ZIP文件,包含Widget的所有源文件以及Widget项目的根目录。
把Widget部署到手机上是安装的第一步。Widget可以通过三种方式部署到手机上:
◆通过蓝牙或红外发送到目标设备的信息收件箱中。
◆通过MMC卡或USB端口传送到目标设备的内存中。
◆通过S60Web浏览器下载。
相应地,根据Widget开发部署方式的不同,安装过程也有所不同:
◆通过信息应用程序打开信息收件箱中的Widget安装包,根据提示安装。
◆使用手机上的文件管理器从MMC卡或从本地C盘上打开Widget安装包,根据提示安装Widget(假定Widget安装包已经复制到MMC卡或通过USB数据线传到手机C盘)。
◆如果在服务器端配置Widget安装包的MIME类型为x-nokia-widget,通过S60浏览器中下载到手机的Widget安装包将被浏览器识别并自动安装。
安装好后的Widget出现在&应用程序&菜单中。
在S603rdEditionFP2的Emulator中安装Widget的步骤与上述步骤类似。常用方法是,首先把Widget安装包复制到文件夹Symbian\9.3\S60_3rd_FP2_Beta\epoc32\winscw\c\Data\Others中(以S60SDK3rdEditionFP2为例),然后使用Emulator中的文件管理器打开并安装。
上一节&体验Widget&中的链接包含了一段演示Widget安装过程的视频。
Widget开发过程
开发Widget使用标准的Web开发技术,如XHTML,CSS,javascript等。这使得Widget开发比较容易上手,开发周期也较短,一般仅需要数日至数周。
Widget包含两个必要文件:HTML文件和info.plist文件。以及其它可选文件:css文件,javascript文件,资源文件(如图标,背景等)。HTML文件定义了widget的结构和内容。Css文件定义了widget的版面格式,如字体、颜色等,起修饰作用。Javascript给widget增加了动态效果,使其具有某些智能。
Widget项目表现为文件系统中的一个目录。该目录包含Widget的所有文件。开发过程中要注意,Widget的必要文件和图标文件(icon.png)必须位于widget项目的根目录下。
Widget的开发过程如下:
1.用字编辑器或WebIDE编写widget代码。
2.调试widget。可结合使用Firefox与Firebug,常用的调试功能有设置断点、单步执行等,还可以观察HTML文件的DOM结构。
3.把widget文件连同目录打成ZIP包,改扩展名为.wgz,安装到测试环境。
测试Widget开发可使用三种环境:
1.S603rdEditionFP2中的emulator。
2.支持WRT的某些手机。当本文写作时,可用的手机包括具有最新版软件的诺基亚N95,N958G等。即将发布的所有S603rdEditionFP2手机也将支持Widget.
3.通过RDA(RemoteDeviceAccess)测试。RDA是一种通过Internet远程访问诺基亚S60设备的服务,有关RDA的信息位于http://apu.ndhub.net。
4.测试Widget,改正Bug。可重复执行步骤1至4。
关于Widget开发的信息还可以访问链接:http://www./...Getting_Started_with_Nokia_Web_Widget_Development.html。该文档通过一个例子详细讲解了如何开发widget。关于WRTAPI参考可访问链接:http://www./info//id/cf225acf-7efe-4dae-b89f-f1d/Web_Run_Time_API_Reference.html。
Widget开发最佳实践
用Firefox和模拟器进行开发和调试
Widget开发基本可以用Firefox浏览器完成,就像开发普通网页类似。在浏览器中调试完成后,如果没有支持的手机,可以先在S60SDK的模拟器中进行测试。
对于有网络连接的应用,需要对网络连接进行类似以下的处理,否则无法在浏览器中调试:
try{ &if(window.netscape){ &netscape.security.PrivilegeManager.enablePrivilege(&UniversalBrowserRead&); &} &varhttpRequest=newXMLHttpRequest(); &httpRequest.open(&GET&,someurl,true); &httpRequest.send(null); &} &catch(e){ &alert(e); &} &&
S603.2或者5模拟器下载地址:http://www./info//id/ec866fab-4b76-49f6-b5a5-afc/S60_All_in_One_SDKs.html
需要注意的是,5版模拟器目前不支持中文,所以只能大致用来测试UI的适配。主要还是要用3版模拟器。
模拟器上的测试方式是:将wgz文件存在sdk安装路径下的\epoc32\winscw\c\Data\Others下,然后从模拟器的文件管理中进行安装。
文件命名和编码
关于Widget中的文件、目录名称,以及文本文件和数据接口的编码格式,请遵循以下原则,以获得对不同手机的最佳兼容性:
◆所有文件和目录名称不要使用中文
◆所有包含中文的文本文件(html,javascript,info.plist等),务必要使用utf-8编码进行保存
◆第三方的API接口返回的xml文件也要尽量使用utf-8编码
CMWAP接入点问题
CMWAP接入点问题是中国特有的问题,一定要了解。
连网时如果选择CMWAP接入点,需要注意CMWAP的请求确认页面问题。如果请求方式是GET,则会碰到请求确认页面,导致内容无法获得。解决办法是对连接的IP或域名进行一次无效请求。还有一种方式是使用POST方式,这种方式的请求不会被CMWAP网关拦住。两种方式的示例如下:
/◆无效请求◆/ &functionjumpCMWAP() &{ &if(window.netscape) &{ &netscape.security.PrivilegeManager.enablePrivilege(&UniversalBrowserRead&); &} &varxmlHttpRequest=newXMLHttpRequest(); &xmlHttpRequest.onreadystatechange=function() &{ &if(xmlHttpRequest.readyState==4) &{ &if(xmlHttpRequest.status==200) &{ &/◆无效请求结束,这里可以开始调用正式GET请求◆/ &} &} &} &xmlHttpRequest.open(&get&,&http://正式域名地址或IP地址/&,true); &xmlHttpRequest.send(null); &} &&/◆GET请求◆/ &xmlHttpRequest.open(&get&,&接口地址&,true); &xmlHttpRequest.send(null); &&/◆POST请求◆/ &xmlHttpRequest.open(&post&,&接口地址&,true); &xmlHttpRequest.setRequestHeader(&Content-Type&,&application/x-www-form-charset=UTF-8&); &xmlHttpRequest.send(&请求参数拼接字符串,参数间&符号隔开&); &&
导航模式设置
Widget开发中有指针(cursor)和导航键(tab)两种导航模式,建议统一使用指针模式,否则如果只支持导航键模式,在触摸屏手机上将无法使用。
打开外部网站链接
必须使用widget.operUrl()来打开其它网站链接,而不是使用类似于&ahref=&&&google&/a&的方式。后一种打开方式将导致无法从打开页面中返回widget。
界面设计和兼容性
如果设计合理,widget可以自动适应不同屏幕尺寸,包括触摸屏和屏幕旋转。如果有的情况界面不容易处理,也可以为不同机型开发不同的widget。但是任何widget中屏幕旋转一定要支持,这个无法通过安装不同版本的widget来解决。
基本的原则就是,不要使用固定大小的图片做为背景和边框等,这点和普通网页设计基本上是一致的。另外在字体选择上也要合适,否则在高分辨率的手机上自会很小。对于普通240&320的屏幕,字体用13~16号,对于XpressMusic0屏幕,需要用24号左右的字体大小。屏幕尺寸可以通过screen.width和screen.height来获得。
另外,由于屏幕旋转时没有事件触发,所以有的情况(例如无法用同一张图片对横屏进行自适应)旋转后要进行特殊处理的,可以用定时器来监测是否有屏幕尺寸的变化,从而模拟旋转事件。这样会有一定的效率问题,因为一直有个定时器程序在不间断地运行。
XpressMusic5800适配问题
XpressMusic5800是基于S60第五版本的触摸屏手机。除了要在界面设计时注意上节所说的问题之外,还有一些其它问题要注意。
◆文本内容在5800上不会自动换行,需要用如下样式进行处理:word-break:break-
◆如果界面上有输入框,输入内容后,菜单会自动变成&完成&和&取消&,这时,如果页面上还有另外的按钮,而用户没有点击&完成&或&取消&而直接点击那个按钮,如果这个按钮的事件处理中,进行了setRightSoftKey()操作,就会立刻导致widget非正常退出。解决的方案有几种,一种是不要在有输入框的页面放置其它按钮和链接,而是将需要的功能放在左键选项菜单中,这样用户只有点击&完成/取消&之后,才有机会再点击其它功能;还有就是不要改变右键菜单,这样的效果就是完成当前操作后,菜单还是停留在&完成/取消&。
Widget开发的发展
Widget的运行需要WRT支持。现阶段的widget只是信息型的widget,从网络获取信息并呈现给用户。此外,WRT在很多方面支持widget与S60的无缝集成,主要体现在widget的管理和使用方式上,与S60应相比,能够给用户一致的使用体验。
下一阶段,widget将进一步整合智能手机平台。例如,widget将能够访问位置,PIM,媒体等手机设备信息,以及其它平台提供的服务。并改进用户界面,进一步提升用户的使用体验。
WRT是一个不断发展的平台,widget也将拥有更强大的能力和丰富的功能。如果解决了平台安全性问题,widget将能够通过S60API来访问S60平台提供的服务。那时,开发部署widget也许会需要一个类似于Symbian签名的验证过程。
诺基亚论坛中文讨论区有关于Web技术和WebWidget的专题,可以访问以下链接来交流经验,答疑解惑,http://discussion./forum/forumdisplay.php?f=76。其中Widget专题收集了Widget文档、开发工具、Q&A等,可通过以下链接访问:http://discussion./forum/showthread.php?t=115609。
新发布的Widgete-learning资料,内容比较全面,包括概述和一个开发实例,http://www./info//...=s60platformArticle7CTA。
关于S60浏览技术的信息,可以访问http://www./browser。
【责任编辑: TEL:(010)】
关于的更多文章
在移动终端上运行的Widget被称为“Mobile Widget”。Mobile Widg
既然强大的Android Studio来了,有什么理由不去用呢?
Android 4.4即将发布,这对大家来说都是很期待的,当
开发者在代码开发和维护中,往往会遇到很多代码优化和
现在的天气越来越冷了,感觉跟冬天似的,小编现在在发
本书依据最新版《软件设计师考试大纲》的考核要求,深入研究了历年软件设计师考试试题的命题风格和试题结构,对考查的知识点进行
Windows Phone专家
Android开发专家
51CTO旗下网站

我要回帖

更多关于 fancy widget 的文章

 

随机推荐