BlackBerry Widget 开发中级篇在完成widge 扩充api...

18
BlackBerry Widget 开发中级篇 作者:王志刚 背景知识 在入门篇中,我们讨论了如何应用 Blackberry 提供的 Widget API 来进行开发,从如下链接中, http://www.blackberry.com/developers/docs/widgetapi/ 可以找到 BlackBerry 能提供的所有 Widget API 列表。然后,对于很多应用开发来说, widget 开发过程中,有些需求是系统 API 所不能满足的,还有一种应用场景是用户需要把原有 java 系统的代码和功能与 widget 技术结合起来。为了满足这两种开发和应用的需求,widget 提供了扩展机制,能够满足用户的这种需求。本文就以一个扩充 widget api 来实现手机在 javascript 中调用 widget api 来实现手机震动功能,这个 api 在标准 widget api 中是没有实现

Transcript of BlackBerry Widget 开发中级篇在完成widge 扩充api...

Page 1: BlackBerry Widget 开发中级篇在完成widge 扩充api 的具体开发和定义工作之后,剩下的就是把widget 发布到Blackberry 的widget 平台中,这一步是通过export

BlackBerry Widget 开发中级篇

作者:王志刚

背景知识

在入门篇中,我们讨论了如何应用 Blackberry 提供的 Widget API 来进行开发,从如下链接中,

http://www.blackberry.com/developers/docs/widgetapi/

可以找到 BlackBerry 能提供的所有 Widget API 列表。然后,对于很多应用开发来说,widget

开发过程中,有些需求是系统 API 所不能满足的,还有一种应用场景是用户需要把原有 java

系统的代码和功能与 widget 技术结合起来。为了满足这两种开发和应用的需求,widget 也

提供了扩展机制,能够满足用户的这种需求。本文就以一个扩充 widget 的 api 来实现手机在

javascript 中调用 widget api 来实现手机震动功能,这个 api 在标准 widget api 中是没有实现

Page 2: BlackBerry Widget 开发中级篇在完成widge 扩充api 的具体开发和定义工作之后,剩下的就是把widget 发布到Blackberry 的widget 平台中,这一步是通过export

的。

开发工具下载

在进行 Widget 开发之前,开发人员需要下载相应的开发工具,BlackBerry eclipse plug-in。

本文使用的 BlackBerry java Plug-in for Eclipse 版本为: v1.1.1 (下载地址如下):

http://na.blackberry.com/eng/developers/browserdev/eclipse.jsp

这个 plug-in 的作用是给用户开发 widget 扩展 api 使用的。

开发具体步骤

步骤一

启动 Eclipse, File New Project, 选择 BlackBerry Project, 然后选择 Next:

Page 3: BlackBerry Widget 开发中级篇在完成widge 扩充api 的具体开发和定义工作之后,剩下的就是把widget 发布到Blackberry 的widget 平台中,这一步是通过export

步骤二

在接下来的对话框,输入 project 的名字 MyWidgetExtension, 然后选择 Next

Page 4: BlackBerry Widget 开发中级篇在完成widge 扩充api 的具体开发和定义工作之后,剩下的就是把widget 发布到Blackberry 的widget 平台中,这一步是通过export

步骤三

接下来,会出现 project 的视图,图中可以看到系统已经添加了新的 project,在 project 的 src

目录下点击右键,然后添加一个 package 名字为 widgetpackge。

Page 5: BlackBerry Widget 开发中级篇在完成widge 扩充api 的具体开发和定义工作之后,剩下的就是把widget 发布到Blackberry 的widget 平台中,这一步是通过export

步骤四

在新建好的 widgetpackage 上点击右键,添加一个新的 class,名为 AlertSample,让他继承

net.rim.device.api.script.Scriptable.

Page 6: BlackBerry Widget 开发中级篇在完成widge 扩充api 的具体开发和定义工作之后,剩下的就是把widget 发布到Blackberry 的widget 平台中,这一步是通过export

步骤五

添加好的 class 的基本框架如下所示:

这个 class 的作用是用来映射在 widget 应用中的调用逻辑。当在 javascript 的代码中通过”.”

操作符号调用扩展的 api 时,getFiel()便会被调用。这个函数在 AlertSample 中的实现如下:

当它被调用后,便会检查当前 device 中 vibrate 功能是不是被支持。

Page 7: BlackBerry Widget 开发中级篇在完成widge 扩充api 的具体开发和定义工作之后,剩下的就是把widget 发布到Blackberry 的widget 平台中,这一步是通过export

步骤六

然后,添加一个 vibrate class 类,让他继承自 net.rim.device.api.script.ScriptableFunction.

Page 8: BlackBerry Widget 开发中级篇在完成widge 扩充api 的具体开发和定义工作之后,剩下的就是把widget 发布到Blackberry 的widget 平台中,这一步是通过export

步骤七

添加好的 class 的代码框架如下所示:

在自动生成的代码框架中加入如下代码,这段代码的作用是让设备震动一段时间。

Page 9: BlackBerry Widget 开发中级篇在完成widge 扩充api 的具体开发和定义工作之后,剩下的就是把widget 发布到Blackberry 的widget 平台中,这一步是通过export

步骤八

接下来,我们将把 AlertSample 和 vibrate 两个 class 连接起来。

在 AlertSample 中加入如下代码:

这些代码的作用是让 AlertSample 能够调用 vibrate 的实例,然后在 AlertSample 的 getField()

中加入如下函数实现代码

Page 10: BlackBerry Widget 开发中级篇在完成widge 扩充api 的具体开发和定义工作之后,剩下的就是把widget 发布到Blackberry 的widget 平台中,这一步是通过export

步骤九

最后,添加 SampleExtension class 到项目中,创建 class 的时候确保 public 和 final 修饰符被

选中,让 sampleextensionclass 继承自 net.rim.device.api.web.WidgetExtension.

Page 11: BlackBerry Widget 开发中级篇在完成widge 扩充api 的具体开发和定义工作之后,剩下的就是把widget 发布到Blackberry 的widget 平台中,这一步是通过export

步骤十

生成好的 class 框架如下所示:

Page 12: BlackBerry Widget 开发中级篇在完成widge 扩充api 的具体开发和定义工作之后,剩下的就是把widget 发布到Blackberry 的widget 平台中,这一步是通过export

这里的几个主要方法的作用描述如下:

getFeatureList() – 这个方式是为了给widget 引擎提供我们新的widget扩成能提供的

feature list列表,如基础篇介绍,这里的feature就是widget开发过程中可以加入的access

的资源。

loadFeature() – 这个方法是当widget使用相应的widget engine提供的feature时候,可以执

行的一些任务,这个一般就是widget 引擎加载进来我们extension api的入口点。

register() – 这个方法提供一个入口插入点,扩充的widget程序可以自动执行一些对当前

widget配置文件和浏览器的操作。

unloadFeatures() –这个是一个入口点,可以加入一些逻辑,如果需要做一些清理工作当

widget退出出这个api调用的时候。

步骤十一

在上步生成的 SampleExtension 的 getFeatureList 中添加如下代码:

Page 13: BlackBerry Widget 开发中级篇在完成widge 扩充api 的具体开发和定义工作之后,剩下的就是把widget 发布到Blackberry 的widget 平台中,这一步是通过export

在 loadFeature 中,添加如下代码:

步骤十二

在完成 widge 扩充 api 的具体开发和定义工作之后,剩下的就是把 widget 发布到 Blackberry

的 widget 平台中,这一步是通过 export 相应的 java 文件完成的。根据基础篇里面的信息,

我们需要把我们做好的 java 文件 export 到相应的 widget sdk 的目录下。右键选择项目,然

后选择 Export

Page 14: BlackBerry Widget 开发中级篇在完成widge 扩充api 的具体开发和定义工作之后,剩下的就是把widget 发布到Blackberry 的widget 平台中,这一步是通过export

在出现的对话框中,选在 general 下的 file system 然后下一步:

不管是用户使用Blackberry的 widget sdk 还是基于 eclipse 的 web plug-in 做 widget 开发发布,

我们都需要把这里做出来的 java文件 export到相应widget sdk安装目录下的 device templates

目录下。在上图中选择 Export 之后,在出现的对话框中选中 src 目录,确保源文件会被 export

出来。

Page 15: BlackBerry Widget 开发中级篇在完成widge 扩充api 的具体开发和定义工作之后,剩下的就是把widget 发布到Blackberry 的widget 平台中,这一步是通过export

这里的 To directory,选择为相应的开发机器上的 widget sdk(或者 web plugin-in for eclipse

安装好之后的 plugins 目下下的)安装录下的 device_templates 目录。在完成了 export 之后,

可以看到在 blackberry 的 widget sdk 的 package 目录下,会出现相应的 source 文件

Page 16: BlackBerry Widget 开发中级篇在完成widge 扩充api 的具体开发和定义工作之后,剩下的就是把widget 发布到Blackberry 的widget 平台中,这一步是通过export

步骤十三

出了发布 source 文件在 widget 平台,我们还需要修改系统的 API 列表访问,这样才能最后

在 widget 中访问调用到我们新添加的 API。

修改其中的 WidgetConfigImpl.java,加入如下黑体的内容

protected WidgetConfigImpl() {

_customHeaders = new HttpHeaders();

_notifications = new Hashtable();

_accessList = new Hashtable();

_featureTable = new Hashtable();

_widgetExtensions = new Vector();

//set defaults

setVersion();

_widgetExtensions.addElement(

net.rim.device.api.web.jse.BlackBerryWidgetToolkit.getInstance());

_widgetExtensions.addElement(new widgetpackage.SampleExtension());

}

步骤十四

所有的这些设置做完之后,剩下来的就是要测试运行了,如开发入门中的方式我们可以添加

一个新的 widget。在你的计算机上创建一个 c:\widget\alert 目录(也可以工作在别的目录),

在这个目录中生成两个 index.html 和 config.xml 文件,正如基础篇介绍的那样。

定义的 index.html 和 config.xml 如下所示:

<html>

<head>

<meta name="viewport" content="width=device-width; height=device-height" />

Page 17: BlackBerry Widget 开发中级篇在完成widge 扩充api 的具体开发和定义工作之后,剩下的就是把widget 发布到Blackberry 的widget 平台中,这一步是通过export

<script type="text/JavaScript">

function vibrateAlert() {

if (sample.alert.vibrateSupported)

{

sample.alert.vibrate(1000);

}

else

alert('extension not supported');

}

</script>

</head>

<body>

<div>

<input type="submit" value="Alert" onclick="vibrateAlert()" />

</div>

</body>

</html>

Config.xml 的内容如下:

<?xml version="1.0" encoding="utf-8" ?>

<widget xmlns="http://www.w3.org/ns/widgets"

xmlns:rim="http://www.blackberry.com/ns/widgets"

version="1.0.0">

<name> Alert Widget </name>

<description>

Sample widget that demonstrates how to use

the Alert API to vibrate the BlackBerry Smartphone

</description>

<author href="http://www.rim.com/"

rim:copyright="no copyright"

email="[email protected]">

Company Name ? Author Name

</author>

<content src="index.html" />

<feature id="sample" />

</widget>

在入门文档中,我们是通过 eclipse 自动打包这两个文件成 cod 的,这里我们也可以使用另

外一种手工通过 bbwp 打包工具完成这一步,先 zip 然后生成 cod。

Page 18: BlackBerry Widget 开发中级篇在完成widge 扩充api 的具体开发和定义工作之后,剩下的就是把widget 发布到Blackberry 的widget 平台中,这一步是通过export

首先把这两个文件压缩为一个 zip 包,名为 alert.zip

然后执行如下命令

这里的 bbwp.exe 位于安装好的 widget sdk 的目录下面。在执行完上述命令后在命令行出可

以看到如下输出,最后在 zip 同级目录下会生成一个 bin 目录,如果基础篇介绍的,bin 目录

下,我们可以发现最后生成的 cod 文件。

验证

完成这一步,就可以把模拟器自动启动了.最后在模拟器中或者真机上, 就可以看到我们的

widget 的效果,如果上一篇基础篇的介绍那样,到这里,一个基于我们新的扩充的 widget

的开发 API 的新的 widget 的开发就完成了。点击 Alert 按钮,就可以体验我们新添加的 API

能提供的功能了。