六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 778|回复: 0

BlackBerry Widget开发进阶

[复制链接]

升级  41.2%

234

主题

234

主题

234

主题

进士

Rank: 4

积分
706
 楼主| 发表于 2013-2-4 02:31:13 | 显示全部楼层 |阅读模式
入门篇中,我们讨论了如何应用Blackberry提供的Widget API来进行开发,从如下链接中http://www.blackberry.com/developers/docs/widgetapi/


可以找到BlackBerry能提供的所有Widget API列表。然后,对于很多应用开发来说,widget开发过程中,有些需求是系统API所不能满足的,还有一种应用场景是用户需要把原有Java系统的代码和功能与widget技术结合起来。为了满足这两种开发和应用的需求,widget也提供了扩展机制,能够满足用户的这种需求。本文就以一个扩充Widget的API来实现手机在javascript中调用widgetapi来实现手机震动功能,这个API在标准Widget API中是没有实现的。
开发工具下载
在进行Widget开发之前,开发人员需要下载相应的开发工具,BlackBerry eclipse plug-in。本文使用的BlackBerry javaPlug-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:


步骤二
在接下来的对话框,输入project的名字My Widget Extension,然后选择Next


步骤三
接下来,会出现project的视图,图中可以看到系统已经添加了新的project,在project的src目录下点击右键,然后添加一个package名字为widgetpackge。


步骤四
在新建好的widgetpackage上点击右键,添加一个新的class,名为Alert Sample,让他继承net.rim.device.api.script.Scriptable.


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


这个class的作用是用来映射在Widget应用中的调用逻辑。当在JavaScript的代码中通过”.”操作符号调用扩展的API时,get Fiel()便会被调用。这个函数在Alert Sample中的实现如下:当它被调用后,便会检查当前device中vibrate功能是不是被支持。


步骤六
然后,添加一个vibrateclass类,让他继承自net.rim.device.api.script.ScriptableFunction.


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


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


步骤八
接下来,我们将把AlertSample和vibrate两个class连接起来。在AlertSample中加入如下代码:


这些代码的作用是让Alert Sample能够调用vibrate的实例,然后在Alert Sample的getField()中加入如下函数实现代码


步骤九
最后,添加Sample Extension class到项目中,创建class的时候确保public和final修饰符被选中,让sample ext ension class继承自net.rim.device.api.web.Widget Extension.
步骤十
生成好的class框架如下所示:


这里的几个主要方法的作用描述如下:
get Feature List()–这个方式是为了给widget引擎提供我们新的widget扩成能提供的feature list列表,如基础篇介绍,这里的feature就是widget开发过程中可以加入的access的资源。
load Feature()–这个方法是当widget使用相应的widget engine提供的feature时候,可以执行的一些任务,这个一般就是widget引擎加载进来我们extensionapi的入口点。
register()–这个方法提供一个入口插入点,扩充的widget程序可以自动执行一些对当前widget配置文件和浏览器的操作。
unloadFeatures()–这个是一个入口点,可以加入一些逻辑,如果需要做一些清理工作当widget退出出这个api调用的时候。
步骤十一
在上步生成的SampleExtension的getFeatureList中添加如下代码:


在loadFeature中,添加如下代码:


步骤十二
在完成widget扩充api的具体开发和定义工作之后,剩下的就是把widget发布到BlackBerry的widget平台中,这一步是通过export相应的Java文件完成的。根据基础篇里面的信息,我们需要把我们做好的java文件export到相应的widget sdk的目录下。右键选择项目,然后选择Export


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


不管是用户使用Blackberry的widget sdk还是基于eclipse的web plug-in做widget开发发布,我们都需要把这里做出来的java文件export到相应widget sdk安装目录下的devicet emplates目录下。在上图中选择Export之后,在出现的对话框中选中src目录,确保源文件会被export出来。


这里的Todirectory,选择为相应的开发机器上的widget sdk(或者web plug in-in for eclipse安装好之后的plugins目下下的)安装录下的device_templates目录。在完成了export之后,可以看到在blackberry的widgetsdk的package目录下,会出现相应的source文件


步骤十三
出了发布source文件在widget平台,我们还需要修改系统的API列表访问,这样才能最后在widget中访问调用到我们新添加的API。


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

  • 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 () );  

  • }  
步骤十四
所有的这些设置做完之后,剩下来的就是要测试运行了,如开发入门中的方式我们可以添加一个新的widget。在你的计算机上创建一个c:\widget\alert目录(也可以工作在别的目录),在这个目录中生成两个index.html和config.xml文件,正如基础篇介绍的那样。
定义的index.html和config.xml如下所示:

  • < 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 >
Config.xml的内容如下:

  • < ? 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 >
在入门文档中,我们是通过eclipse自动打包这两个文件成cod的,这里我们也可以使用另外一种手工通过bbwp打包工具完成这一步,先zip然后生成cod。
首先把这两个文件压缩为一个zip包,名为alert.zip
然后执行如下命令


这里的bbwp.exe位于安装好的widget sdk的目录下面。在执行完上述命令后在命令行出可以看到如下输出,最后在zip同级目录下会生成一个bin目录,如果基础篇介绍的,bin目录下,我们可以发现最后生成的cod文件。


验证
完成这一步,就可以把模拟器自动启动了.最后在模拟器中或者真机上,就可以看到我们的widget的效果,如果上一篇基础篇的介绍那样,到这里,一个基于我们新的扩充的widget的开发API的新的widget的开发就完成了。点击Alert按钮,就可以体验我们新添加的API能提供的功能了。

【编辑推荐】
<DIV align=right>【责任编辑:立方 TEL:(010)68476606】
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表