在 MMS 刚出现时有些专家预言它会取代 SMS如果它价格不是这么高话这个预言确实有可能会成为现实即便如此这种能在手机的间传递多媒体内容功能还是渐受青睐最近手机电子邮件成功意味着未来手机消息传递主要形式可能是电子邮件但是要到那步还有很长段路要走
本月我将讨论 Java ME 无线消息 API我将从几个简单编码举例开始随后讨论它为企业开发人员带来各种机会
无线消息 API
JSR-205 中定义无线消息 API(WMA)2.0 是用于无线消息组可选 APIWMA 连接基于通用连接框架该框架是在基于 CLDC Java ME 架构中进行通信基础WMA 2.0 向后兼容 WMA 1.1添加了对发送和接收多媒体消息支持换句话说无线消息 API 提供了无线通信高级抽象它将传输层完全隐藏因而所要做工作只是创建消息、发送消息和接收消息
WMA 支持文本消息、小区广播和多媒体消息文本消息很简单大多数人都知道它是什么SMS 消息极为流行而且已经成为日常生活部分WMA 支持发送和接收文本消息发送非常简单:只需定义目标地址和文本文本被称为净荷(payload)接收稍微复杂些需要应用能够侦听进入消息在下面举例中将看到如何读取进入消息
发送和接收
发送文本消息很简单步骤如下:
设置手机号码(地址)
用 Connector 接口创建 MessageConnection
创建新消息并把它类型转换成 TextMessage
设置净荷
通过 send 思路方法并向思路方法传递 Message 例子发送消息
发送消息中包含发送人信息和正常发送消息时相同清单 1 显示了使用 Java ME WMA 发送消息代码
清单 1. 发送消息
try {
String addr = ?ms://+358401234567?
MessageConnection conn = (MessageConnection) Connector.open(addr);
TextMessage msg =
(TextMessage)conn.Message(MessageConnection.TEXT_MESSAGE);
msg.PayloadText(?his is a test message!?;
conn.send(msg);
} catch (Exception e) {
...
}
接收文本消息略微复杂但也不是太复杂在个端口上打开 MessageConnection (在这个举例中是 5432)并从 MessageConnection 读取进入消息可以用 instanceof 测试消息类型要接收有消息进入通知应用必须实现 MessageListener 接口所以要编写比 清单 2 更复杂些代码才能让它真正工作
清单 2. 接收消息
try {
String addr = ?ms://:5432?
MessageConnection conn = (MessageConnection) Connector.open(addr);
Message msg = null;
while (someExitCondition) {
msg = conn.receive;
(msg instanceof TextMessage) {
TextMessage tmsg = (TextMessage)msg;
String receivedText = tmsg.getPayloadText;
// respond with the same text with ?hanks.?
tmsg.PayloadText(?hanks?;
conn.send(tmsg);
} {
// Received message was not a text message, but e.g. binary
...
}
} // end while
} catch (Exception e) {
...
}
发送 2进制消息和发送文本消息很相似首先需要把数据放在字节中然后创建 MessageConnection(如 清单 3 所示)并创建 BINARY_MESSAGE
清单 3. 发送 2进制消息
try {
String str = "Hello!";
msg = str.getBytes;
String addr = "sms://+358401234567";
MessageConnection conn = (MessageConnection) Connector.open(addr);
BinaryMessage bm = (BinaryMessage)mc.Message
(MessageConnection.BINARY_MESSAGE);
(url!= null)
bm.Address(url);
bm.PayloadData(msg);
conn.send(bm);
}
catch(Exception e) {
}
如果想学习使用 WMA 编写代码更多内容请参阅本文末尾 参考资料现在我把重点放在 WMA 潜在应用上
无尽可能性
用消息能做什么呢?从 Java ME 应用发送文本消息确实很酷 —— 可以按自己想法定制用户界面和用途 —— 但它还算不上是招人喜爱应用在让这种消息传递尽可能简单便捷方面Nokia 和 Sony-Ericsson 已经投入了大量时间和金钱
商业应用和预定义文本信息为其带来了真正优势例如在商业应用中很可能会出现这样些情况:GPRS、WLAN 或者其他基于 IP 协议不可用或不可靠;使用是基于 SMS 传统接口;操作也还是带有 SMS 接口设备此时您就可以用文本消息作为传输协议比如在某种场景下您可以让服务器(例如 CRM 服务器)发送带有最新销售数据文本消息然后手机应用可以确认来自业务服务消息并用图表或者其他您喜欢方式呈现数据(对于更大量数据当然用 HTTP 或数据报会更好)
也可以在游戏编程中同时使用文本和 2进制消息例如个玩家可以把特定于游戏些内容(例如获得级别、工具或点数)发送给玩同手机游戏好友好友应用会接收消息并打开发送内容当然 2进制数据也可以用于商业应用
多媒体消息在应用或服务中还不太流行但是它们确实为游戏领域提供了些有趣机会例如可以把游戏屏幕快照发送给好友好友能以多媒体消息形式接收快照而不依赖任何特定应用以图片形式发送天气预报是利用 MMS 方便性另个便利服务
3类消息传递
WMA 消息传递可以分成:服务器到手机、手机到服务器和手机到手机
在服务器到手机 消息传递中CRM 应用可以向手机应用发送数据手机应用可以接收数据并用对用户友好方式呈现数据在手机到服务器 消息传递中手机应用可以向服务器发送数据(HTTP 连接也可以做这项工作但 HTTP 连接不可能总是存在)在手机到手机 消息传递中用户可以向好友手机发送应用数据或游戏数据进行游戏项目交换及其他操作
结束语
在本文中我介绍了使用 Java ME WMA 进行无线消息传递相关内容我提供了些基本发送和接收举例并讨论了无线消息传递些使用方式WMA 支持发送和接收文本消息、 2进制消息和多媒体消息支持接收小区广播消息所有这些消息类型为游戏开发人员和商业应用开发人员提供了许多机会
消息传递(电子邮件、IM)已经证明是 Internet 日常应用重要部分文本消息已经成为了手机用户体验至关重要部分WMA 简单性让它有幸成为了无线应用开发人员工具包中员
消息内容
2进制消息顾名思义就是带有 2进制内容消息内容可以是要传递给应用或者从应用传递给其他客户机或服务器任何内容多部分消息可以包含多块媒体例如文本、音频和视频
小区广播可能是最不为人所知消息类型小区广播服务是种数据服务在这种服务中消息由基站广播由侦听这个基站每个移动站接收这个服务是单向这意味着 WMA 只能用来接收这类消息
最新评论