作者: 王志刚
背景知识
在入门 篇中 , 我 们讨 论了如 何应 用 Bl ack berr y 提供的 W i dget A P I 来进行 开发 , 从 如下链 接中 ,
http://w w w.b l ackbe r r y.c o m /de v e l ope r s / doc s/widgetapi/
可以 找 到 Bl ack Berr y 能提供的所 有 W i dget A P I 列表 。 然 后, 对于 很多 应用 开发 来说 , wi dget 开发过 程中 , 有 些需 求是 系统 A P I 所不 能满 足的, 还有一 种应 用场 景是 用户 需要把原 有 j av a 系统的 代码 和功 能与 wi dg et 技术结合 起来 。为 了满 足这两 种开 发和 应用 的需 求, wi dget 也 提供了 扩展 机制 , 能够满 足用户 的这 种需求 。 本文 就以一 个扩 充 wi dget 的 ap i 来实现 手机 在 j av as cri pt 中调用 wi dget ap i 来实现 手机 震动 功能 ,这 个 api 在 标准 wi dg et api 中 是没有 实现
的。
开发工具下载
在进 行 W i dget 开 发之 前 , 开 发人员 需要 下载 相应 的开 发工具 ,Bl ack Berr y ecli pse pl ug- i n 。 本文使用 的 Bl ack Berr y j a va P l ug- i n f or Ecli pse 版本为 : v 1.1.1 ( 下载 地址如 下 ):
http://na.blackber r y.c o m /eng/de v elopers / browserde v /ec lips e . j sp
这个 p l u g- i n 的作用是 给用 户开 发 wi dget 扩 展 api 使 用的。
开发具体步骤
步骤一
启动 Ecli pse , F il e à N ew à P r oj ect , 选 择 Bl ack Berr y P r oj ect , 然 后选 择 N ext :
步骤三
接下来 , 会 出现 pr oj ect 的 视图, 图中 可以 看到 系统 已经添 加了新 的 pr oj ect , 在 pr oj ect 的 src
目录下 点击 右键 ,然 后添 加一 个 pack age 名字 为 wi dget packge 。
步骤四
在新建 好的 wi dg et packag e 上点 击右 键, 添加 一个 新的 cl ass , 名为 A l ert Sam pl e ,让 他继 承
net .ri m .de v i ce.api .scri pt .Scri pt abl e.
步骤五
添加好 的 cl as s 的基 本框架 如下所 示:
这个 cl as s 的 作用 是用 来映 射在 wi dget 应用 中的 调用 逻辑。 当在 j av as cri pt 的代 码中通 过 ”.” 操作符 号调 用扩展 的 api 时, get F i el() 便会被调用。 这个函数 在 A l ert Sam pl e 中 的实现 如下 : 当它被 调用 后, 便会 检查 当前 d ev i ce 中 v i br at e 功能 是不是 被支 持。
步骤六
然后, 添加一 个 v i br at e cl as s 类,让 他继承 自 net .ri m . dev i ce.api .scri pt .Scri pt abl e F uncti on.
步骤八
接下来 ,我 们将 把 A l ert S a m pl e 和 v i br at e 两个 cl as s 连接起 来。 在 A l ert Sam pl e 中加 入如下 代码:
|
中加入 如下 函数 实现 代码
步骤九
最后,添 加 Sam pl eExt ens i on cl as s 到项 目中 ,创 建 cl as s 的时 候确 保 pu bli c 和 fi nal 修饰 符被 选中, 让 sa m pl eext ensi oncl as s 继承 自 net .ri m .dev i ce.api .w eb.W i dget Exte nsi on.
步骤十
生成好 的 cl as s 框架 如下所 示:
这里的 几个 主要 方法 的作 用描述 如下 :
g et Feat u r eL i s t( ) – 这 个方 式是为了 给 widg et 引擎 提供我们 新的 widg e t 扩成 能提供的
feature lis t 列表 ,如 基础 篇介绍 ,这里 的 fea ture 就 是 widg et 开 发过程 中可以 加入的 ac cess
的资源。
l oadFe at u r e ( ) – 这个 方法 是当 widg et 使用相 应的 wi dg et e ng in e 提 供的 fea ture 时候, 可以执 行的一些 任务, 这个一般 就是 widg et 引擎 加载进 来我们 e xt ensi o n api 的入 口点。
r eg i st er ( ) – 这个 方法提供 一个入口 插入点 ,扩充 的 widg et 程序 可以自 动执行 一些对当 前
widg et 配置 文件和 浏览器 的操作。
unl oad Fea t ur es ( ) – 这个是 一个入口 点,可 以加入一 些逻辑, 如果需 要做一 些 清理工作 当
widg et 退出 出这个 ap i 调用 的时候。
步骤十一
在上步 生成 的 S am pl eExt ensi on 的 get F eat ur e L i s t 中添 加如下 代码 :
在 l oadF eat ur e 中,添 加如 下代码 :
步骤十二
在完 成 wi dge 扩 充 api 的具 体开发 和定 义工 作之后 , 剩下的 就是 把 wi dget 发布 到 Bl ac kberr y
的 wi dget 平台中, 这一步 是通过 ex por t 相应的 j av a 文件完 成的 。根 据基 础篇 里面的 信息 , 我们需 要把 我们 做好 的 j av a 文件 ex por t 到相 应的 wi d get sdk 的 目录 下。 右键选 择项目 ,然 后选 择 Ex por t
在出现 的对 话框 中,选 在 gener al 下 的 fil e s y st e m 然后下一 步:
不管是 用户 使用 Bl ack berr y 的 wi dget sdk 还是 基于 ec li pse 的 w eb pl ug- i n 做 wi dget 开发发 布, 我们都 需要 把这 里做 出来 的 j av a 文件 exp or t 到相 应 wi dget sdk 安装 目录 下的 de v i ce t e m pl at es 目录下 。 在上 图中 选择 Exp or t 之后 , 在 出现 的对 话框 中选 中 sr c 目 录, 确保 源文 件会 被 exp or t 出来。
这里 的 T o dir ect or y ,选择为相应 的开 发机 器上 的 w i dget sdk ( 或者 w e b pl ugi n - i n f or ecli pse
安装好 之后 的 pl u gi ns 目下 下的) 安装 录下 的 dev i ce_t em pl at es 目录。在 完成 了 e xpor t 之后 , 可以看到 在 bl ackberr y 的 wi dget sdk 的 p ackag e 目录 下,会 出现 相应 的 so ur ce 文件
步骤十三
出了发布 s our ce 文 件在 wi dget 平台, 我们 还需 要修 改系统的 A P I 列表 访问, 这样才 能最 后
在 wi dget 中 访问 调用 到我 们新添加 的 A P I 。
修改其中 的 W id g etC o n f ig I m p l .j av a ,加入 如下黑 体的 内容
pro tecte d W i d g etC on f i g I m p l() {
_ cus to m Head er s = n e w Http H ead er s () ;
_ n o tif icat io n s = n e w Has h tab l e() ;
_ ac ce ss Lis t = n e w Has h tab le() ;
_ f ea tu r eT ab le = n e w Ha sh tab l e() ;
_ w id g etE x te ns io n s = n e w Vec tor() ;
//s et d ef a u lt s s etVer sio n () ;
_ w id g etE x te ns io ns .add Ele m e n t(
n et.r i m .d e v ice. ap i. w eb .j s e.B lack B err y W id g etT oo lk it.g etIn s t an ce()) ;
_w id ge tExte n sion s.a d d Eleme n t( n e w w id ge tpac k age .S am p leExte n sion () );
}
步骤十四
所有的 这些 设置 做完 之后 , 剩下 来的 就是 要测 试运 行了, 如开 发入 门中 的方 式我们 可以 添加 一个新 的 wi dget 。 在你的 计算机 上创 建一 个 c:/wi dge t/ al er t 目录(也 可以 工作在 别的目 录) , 在这个 目录 中生 成两 个 i nd ex.ht m l 和 confi g.xm l 文件,正如 基础 篇介 绍的 那样 。
定义 的 i ndex. ht m l 和 confi g.xm l 如下所示 :
< ht m l >
< head >
< m et a nam e="v i ew por t " cont ent = " wi dt h= dev i ce -wi dt h; h ei ght = dev i ce- hei ght " / >
< scri pt t y pe=" t ext/ J av aScri pt " >
f uncti on v i br at eA l ert( ) {
i f ( sa m pl e.al er t .vi br at eSuppo rt ed)
{
}
el se
}
sa m pl e.al ert .v i br at e( 10 00) ;
al ert( ' ext ensi on not support ed' ) ;
< / scri pt >
< / head >
< body >
< di v >
< i nput t y pe=" subm i t " v a l ue=" A l ert " oncli ck="v i br at eA l ert() " />
< / di v >
< / body >
< / ht m l >
C onfi g.xm l 的内 容如 下:
< ? xm l v er si on= " 1.0" encodi ng= " ut f- 8" ? >
< wi dget xm l ns=" htt p:/ / ww w . w 3.or g/ ns/ wi dget s" xm l ns: r i m = " htt p: / / ww w .bl ackber r y .co m / ns/ w i dget s" v er si on= " 1.0.0" >
< nam e> A l er t W i dget < / nam e>
< des cri pti on>
Sam pl e wi dget t hat dem onst r at es how t o use
t he A l er t A P I t o v i br at e t he Bla ck Berr y S m art phone
< / des cri pti on>
< aut hor hr ef = " htt p://w w w .r i m .co m / "
r i m : cop y ri ght = " no cop y ri ght "
em ail = " aut hor _nam e@aut hor dom ai n.com " > Com pany N am e ? A ut hor N a m e
< / aut hor >
< cont ent sr c = " i ndex.ht m l " / >
< f eat ur e i d= " sa m pl e" />
< /wi dget >
在入门 文档 中, 我们 是通 过 ecli pse 自动 打包 这两个 文件成 c od 的 ,这 里我们 也可以 使用 另 外一种 手工通 过 bbw p 打 包工具 完成 这一 步, 先 zi p 然后 生成 cod 。
首先把 这两 个文 件压 缩为 一个 zi p 包, 名为 al ert .zi p
然后执 行如 下命 令
这里 的 bbw p. exe 位于 安装 好的 wi dget s dk 的目 录下 面。在 执行 完上 述命 令后 在命令 行出 可 以看到 如下 输出 , 最 后在 z i p 同级 目录 下会 生成一 个 bi n 目录 , 如 果基 础篇 介绍 的, bi n 目录 下,我 们可 以发 现最 后生 成的 c od 文 件。
验证
完 成 这 一 步 , 就 可 以 把 模 拟 器 自 动 启 动 了 . 最 后 在 模 拟 器 中 或 者 真 机 上 , 就 可 以 看 到 我 们 的 wi dget 的效果,如果上一 篇基础篇的介绍 那样,到 这里,一个基于 我们新的 扩充的 wi dget 的开 发 A P I 的 新的 wi dget 的开发 就完 成了。 点 击 A l e r t 按钮, 就 可以 体验 我们 新添加 的 A P I 能提供 的功 能了 。
BlackBerry SDK下载