日期:2014-05-16  浏览次数:20481 次

无线消息 API JSR-205 JSR-102 整理
????? 开发手机程序,最能想到的就是对SMS(Short Messaging Service), MMS(Multimedia Messaging Service),Email的支持。
对于SMS, MMS,sun官方已经出了个jsr-205,jsr-102规范对其进行了完善的支持。至于Email吗,介绍完前两个后,我再把我的想法说出来,大家参考下。

一。前言
学习 Java? Micro Edition(Java ME)无线消息 API。这个专栏将从几个简单的代码示例开始,随后讨论它为企业开发人员带来的各种机会。

移动电话最常见的一个特性就是消息传递。文本消息或短消息(SMS)自引入之初,已经变得越来越流行。当然,多媒体消息(MMS)又为其增加了图片、声音和视频等多媒体内容。

在 MMS 刚出现时,有些专家预言它会取代 SMS,如果它的价格不是这么高的话,这个预言确实有可能会成为现实。即便如此,这种能在手机之间传递多媒体内容的功能还是渐受青睐。最近手机电子邮件的 成功,意味着未来手机消息传递的主要形式可能是电子邮件,但是要到那一步还有很长的一段路要走。

二。无线消息
?JSR-205 中定义的无线消息 API(WMA)2.0 是用于无线消息的一组可选 API。WMA 的连接基于通用连接框架,该框架是在基于 CLDC 的 Java ME 架构中进行通信的基础。WMA 2.0 向后兼容 WMA 1.1,添加了对发送和接收多媒体消息的支持。换句话说,无线消息 API 提供了无线通信的高级抽象。它将传输层完全隐藏,因而所要做的工作只是创建消息、发送消息和接收消息。

WMA 支持文本消息、小区广播和多媒体消息。文本消息很简单,大多数人都知道它是什么。SMS 消息极为流行,而且已经成为日常生活的一部分。WMA 支持发送和接收文本消息。发送非常简单:只需定义目标地址和文本,文本被称为净荷(payload)。接收稍微复杂些,因为需要应用程序能够侦听进入的消息。在下面的示例中将看到如何读取进入的消息。

这里介绍下jsr-102规范是针对WMA1.1的。 比较详细的资料可以google下。jsr205规范完全向下兼容,也就是说。你在jsr-102写的程序可以不用任何修改就可以运行在jsr-205规范下。

消息内容

二进制消息顾名思义就是带有二进制内容的消息。内容可以是要传递给应用程序或者从应用程序传递给其他客户机或服务器的任何内容。多部分消息可以包含多块媒体,例如文本、音频和视频。

小区广播可能是最不为人所知的消息类型。小区广播服务是一种数据服务,在这种服务中,消息由基站广播,由侦听这个基站的每个移动站接收。这个服务是单向的,这意味着 WMA 只能用来接收这类消息。

发送和接收

发送文本消息很简单。步骤如下:

  • 设置手机号码(地址)。
  • Connector 接口创建 MessageConnection
  • 创建新消息,并把它的类型转换成 TextMessage
  • 设置净荷。
  • 通过调用 send() 方法并向方法传递 Message 实例,发送消息。

发送的消息中包含的发送人信息,与正常发送消息时的相同。显示了使用 Java ME WMA 发送消息的代码。

java 代码
?
  1. try?{???
  2. ??String?addr?=??ms://+358401234567????
  3. ??MessageConnection?conn?=?(MessageConnection)?Connector.open(addr);???
  4. ??TextMessage?msg?=???
  5. ???(TextMessage)conn.newMessage(MessageConnection.TEXT_MESSAGE);???
  6. ??msg.setPayloadText(?his?is?a?test?message!?;???
  7. ??conn.send(msg);???
  8. }?catch?(Exception?e)?{???
  9. ...???
  10. }???

接收文本消息略微复杂,但也不是太复杂。在一个端口上打开 MessageConnection (在这个示例中是 5432)并从 MessageConnection 读取进入的消息。可以用 instanceof 测试消息的类型。要接收有消息进入的通知,应用程序必须实现 MessageListener 接口,所以要编写比? 更复杂一些的代码,才能让它真正工作。


java 代码
?
  1. try?{???
  2. ??String?addr?=??ms://:5432????
  3. ??MessageConnection?conn?=?(MessageConnection)?Connector.open(addr);???
  4. ??Message?msg?=?null;???
  5. ??while?(someExitCondition)?{???
  6. ????msg?=?conn.receive();???
  7. ????if?(msg?instanceof?TextMessage)?{???
  8. ???????????TextMessage?tmsg?=?(TextMessage)msg;???
  9. ???????????String?receivedText?=?tmsg.getPayloadText();???
  10. ?????