BlackBerry与MIDlet交互


BlackBerry 应用和 MIDlet 之间的交互 作者: 王志刚 一 用 RMS 在 MIDlet 和 BlackBerry 之间共享数据 对于很多没有 BlackBerry 应用经验的开发者,或者对于很多现有的 J2ME 的系统,如果以最小的代 价和 BlackBerry 应用交互,或者和 BlackBerry 应用集成,这是一个很好的方法。同时,这也是对 老的 J2ME 应用和 BlackBerry 的新应用迁移和同步数据的一个好办法。既然 BlackBerry 开发对 J2ME 提供支持,所以 RMS 可以被用来作为这种解决的首选。 原来的 MIDP 规范定义了持久的,基于记录的存储功能叫记录管理存储(RMS)。一个 MIDlet 套件可 以使用 RMS 创建一个或多个记录存储,每个由一个独一无二的名字标识。在 javax.microedition.rms 包中可以找到必要的类和接口。Record Store 提供了打开,关闭,读取,写 入和更新操作,也提供方法删除单个记录或者整个存储。这个包包含接口来列举,排序和筛选 RMS 内容。 在 MIDP1.0 时候,每个 RMS 存储只属于创建它的 MIDlet 套件。MIDP2.0 规范给 RMS 包增加了一 个非常有用的能力:它允许一个 MIDlet 套件和另一个 MIDlet 套件共享记录存储。 如何共享 共享一个 RMS 记录存储需要两个或者多个参与者:一个拥有者和一个或者多个消费者。拥有者负 责创建和命名存储和建立授权模式-共享或者不共享-和它的访问模式-可写或者不可写。消费者通 过名字获得记录存储的访问。消费者不能访问没有共享的存储,也不能修改不可写的存储。 一个共享的 RMS 被一个三元组标识(提供者名字,MIDlet 套件名字,记录存储名字): → 提供者名字是 JAD 或者 manifest 文件里面的 MIDlet-Vendor 属性的值。 → MIDlet 套件名字是 JAD 文件里面 MIDlet-name 字段的值 → 记录存储名字是一个 1 到 32 位长的区分大小写的 Unicode 字符串,是当你创建记录存储时候用 的名字。 要支持共享,MIDP2.0 标准在 javax.microedition.rms 中添加了两个字段和三个方法 第一个新方法打开一个已经存在的记录存储,或者创建一个新的记录存储并设置它的授权和可写 特性。 static RecordStore OpenRecordStore (String recordStoreName, boolean create, int authmode, boolean writable); 参数如下: recordStoreName 设置记录存储的名字 sets the name of the record store. create, 如果为 true,创建并不存在的存储. authmode 指定授权模式 specifies the authorization mode: RecordStore.AUTHMODE_PRIVATE 阻止共 享 or RecordStore.AUTHMODE_ANY 允许共享.如果存储已经存在这个参数会被忽略. writeable, 如果为 true, 指定其他 MIDlet 套件可以修改这个记录存储. 如果存储已经存在这个参数会 被忽略. 消费者打开一个共享的记录存储的方法如下: 这里:  recordStoreName 是要打开的共享记录存储的名字  vendorName 是拥有者 MIDlet 套件的 MIDlet-Vendor 属性的值  suiteName 是拥有者 MIDlet 套件的名字 仅当记录存储的拥有者设置了 automode 为 AUTHMODE_ANY 时这个方法才能成功打开记录存储。 需要注意的是你不能直接检测存储的可写属性。要发现一个记录存储是否可写的唯一方法是试着 向记录存储写入,如果不可写就捕获相应的异常。 记住在 JAD 或者 manifestMIDlet-Version,并不在参数列表中。这意味着拥有者套件无法在影响消 费者的前提下改变共享的存储的记录格式。 最后一个新方法如下: void setMode( int authmode, boolean writable ); 这里: authmode 指定记录存储的新的授权模式 specifies the new authorization mode of the , AUTHMODE_PRIVATE 或者 AUTHMODE_ANY. writable 指定存储的信息可写模式 specifies the store's new writable mode. 只有拥有者 MIDlet 套件才能改变 authmode 和 writable 属性. 没有方法能够用来查询这些设置 总结: 在原有老的 MIDlet 应用中创建使用了 RMS 之后,在 BlackBerry 中直接打开就可以操作了,反过来 也是。 二 使用全局事件来进行应用交互 BlackBerry 平台提供了事件模型,用来在不同的应用之间通信,在使用事件模型的时候需要注意 如下事项:  任何应用程序都可以发布或者监听全局事件  通过响应全局事件可以在一个应用程序中执行一些本来应该在另一个应用中出现的动作  通过发送全局事件也可以在应用程序之间传递数据 定义全局事件 对于全局事件的定义,BlackBerry 有自己的定义规范:  定义一个 ID 变量  把 ID 变量定义为静态的,从而使得其他的类也可以引用到  通对包名做 HASH 产生 ID,使 ID 变得独一无二 示例代码如下 class GlobalEventFiringApp extends UiApplication { //ID will be hash of package name public static long GLOBAL_ID = 0xba4b84944bb7429eL; 发布一个全局事件 通过把事件 ID 传递到 postGlobalEvent() 方法中 ,我们可以发布一个全局事件 BlackBerry 提供了有四种不同的方法来发布发布一个事件 示例代码如下 //post the global even from your application after something //meaningful has happened ApplicationManager.getApplicationManager() .postGlobalEvent(GLOBAL_ID); //or a post passing other information ApplicationManager.getApplicationmanager() .postGolbalEvent(GLOBAL_ID,data0,data1,object0,object1); 对于事件接受者来说,需要考虑和实现的关键点如下  全局监听应用程序必须要是一个自动启动应用程序  监听程序需要有类能够实现一个 GlobalEventListener 接口  监听程序需要添加 GlobalEventListener 实例 示例代码如下: class GlobalEventListenerApp extends UiApplication implements GlobalEventListener { … public GlobalEventListenerApp() { addGlobalEventListener(this); 对于 GlobalEventListener 接口,来说应用需要注意的是,必须要实现具体事件影响的方法,示例 代码如下: GlobalEventListener 接口只有一个必须要实现的方法 不管事件怎么发布的,这个方法都是一样的 //this method is executed when a global event has been posted public void eventOccured(long guid, int data0, int dat1, Object object0, Object object1) { //check the ID of the posting app if (guid == GlobalEventFiringApp.GLOBAL_ID) { //do something meaningful here //variables that were passed in can be used depending //on what post occurred. Otherwise the value will be null } } 三 使用 RUNTIME Store 来应用交互 相对于静态的 RMS 的繁琐配置和不灵活,BlackBerry 提供的运行时存储(runtime store) 非常灵 活和方便,它在平台即被提供了如下功能。  运行时存储提供一个中间区域让不用应用可以共享对象  通过数字签名的任何应用程序都可以访问运行时存储 对于运行时存储 – 存储数据 的使用需要注意的是:  对象可以添加到运行时存储或者从运行时存储中替换掉  运行时存储必须以一个独一无二的 ID 创建  任何类型的对象都可以放到运行时存储中 这里是创建运行时存储和写入简单数据的代码示例 class CreateStoreDemo extends UiApplication { //create the ID based on package name public static long STORE_ID = 0x23ad23489a243L; public CreateStoreDemo() { String msg = “Shared text for another application”; RuntimeStore store = RuntimeStore.getRuntimeStore(); try { store.put(STORE_ID, msg); } catch (Exception ex) {} } } 创建好了以后,这里就是读取运行时候存储的代码示例 class ReadStoreDemo extends UiApplication { public ReadStoreDemo() { RuntimeStore store = RuntimeStore.getRuntimeStore(); try { //cast the returned object to a string String msg = (String)store.get(CreateStoreDemo.STORE_ID); } catch (Exception ex) { //handle exception } } }
还剩4页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 20 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

BlackBerry

贡献于2010-09-16

下载需要 20 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf