开发手机程序,最能想到的就是对SMS(ShortMessagingService),MMS(MultimediaMessagingService),Email的支持。
对于SMS,MMS,sun官方已经出了个jsr-205,jsr-102规范对其进行了完善的支持。至于Email吗,介绍完前两个后,我再把我的想法说出来,大家参考下。
一。前言
学习Java™MicroEdition(JavaME)无线消息API。这个专栏将从几个简单的代码示例开始,随后讨论它为企业开发人员带来的各种机会。
<!--STARTRESERVEDFORFUTUREUSEINCLUDEFILES--><!--includejavascriptonceweverifyteamswantstousethisanditwillworkondbcsandcyrilliccharacters--><!--ENDRESERVEDFORFUTUREUSEINCLUDEFILES-->
移动电话最常见的一个特性就是消息传递。文本消息或短消息(SMS)自引入之初,已经变得越来越流行。当然,多媒体消息(MMS)又为其增加了图片、声音和视频等多媒体内容。
在MMS刚出现时,有些专家预言它会取代SMS,如果它的价格不是这么高的话,这个预言确实有可能会成为现实。即便如此,这种能在手机之间传递多媒体内容的功能还是渐受青睐。最近手机电子邮件的成功,意味着未来手机消息传递的主要形式可能是电子邮件,但是要到那一步还有很长的一段路要走。
二。无线消息
JSR-205中定义的无线消息API(WMA)2.0是用于无线消息的一组可选API。WMA的连接基于通用连接框架,该框架是在基于CLDC的JavaME架构中进行通信的基础。WMA2.0向后兼容WMA1.1,添加了对发送和接收多媒体消息的支持。换句话说,无线消息API提供了无线通信的高级抽象。它将传输层完全隐藏,因而所要做的工作只是创建消息、发送消息和接收消息。
WMA支持文本消息、小区广播和多媒体消息。文本消息很简单,大多数人都知道它是什么。SMS消息极为流行,而且已经成为日常生活的一部分。WMA支持发送和接收文本消息。发送非常简单:只需定义目标地址和文本,文本被称为净荷(payload)。接收稍微复杂些,因为需要应用程序能够侦听进入的消息。在下面的示例中将看到如何读取进入的消息。
这里介绍下jsr-102规范是针对WMA1.1的。比较详细的资料可以google下。jsr205规范完全向下兼容,也就是说。你在jsr-102写的程序可以不用任何修改就可以运行在jsr-205规范下。
消息内容
二进制消息顾名思义就是带有二进制内容的消息。内容可以是要传递给应用程序或者从应用程序传递给其他客户机或服务器的任何内容。多部分消息可以包含多块媒体,例如文本、音频和视频。
小区广播可能是最不为人所知的消息类型。小区广播服务是一种数据服务,在这种服务中,消息由基站广播,由侦听这个基站的每个移动站接收。这个服务是单向的,这意味着WMA只能用来接收这类消息。
发送和接收
发送文本消息很简单。步骤如下:
- 设置手机号码(地址)。
- 用
Connector
接口创建MessageConnection
。
- 创建新消息,并把它的类型转换成
TextMessage
。
- 设置净荷。
- 通过调用
send()
方法并向方法传递Message
实例,发送消息。
发送的消息中包含的发送人信息,与正常发送消息时的相同。显示了使用JavaMEWMA发送消息的代码。
java代码
-
try{
-
Stringaddr=?ms:
-
MessageConnectionconn=(MessageConnection)Connector.open(addr);
-
TextMessagemsg=
-
(TextMessage)conn.newMessage(MessageConnection.TEXT_MESSAGE);
-
msg.setPayloadText(?hisisatestmessage!?;
-
conn.send(msg);
-
}catch(Exceptione){
-
...
-
}
接收文本消息略微复杂,但也不是太复杂。在一个端口上打开MessageConnection
(在这个示例中是5432)并从MessageConnection
读取进入的消息。可以用instanceof
测试消息的类型。要接收有消息进入的通知,应用程序必须实现MessageListener
接口,所以要编写比更复杂一些的代码,才能让它真正工作。
java代码
-
try{
-
Stringaddr=?ms:
-
MessageConnectionconn=(MessageConnection)Connector.open(addr);
-
Messagemsg=null;
-
while(someExitCondition){
-
msg=conn.receive();
-
if(msginstanceofTextMessage){
-
TextMessagetmsg=(TextMessage)msg;
-
StringreceivedText=tmsg.getPayloadText();
-
-
tmsg.setPayloadText(?hanks?;
-
conn.send(tmsg);
-
}else{
-
-
...
-
}
-
}
-
}catch(Exceptione){
-
...
-
}
发送二进制消息与发送文本消息很相似。首先需要把数据放在字节数组中,然后创建MessageConnection
(如清单3BINARY_MESSAGE
。
java代码
-
try{
-
Stringstr="Hello!";
-
byte[]msg=str.getBytes();
-
Stringaddr="sms://+358401234567";
-
MessageConnectionconn=(MessageConnection)Connector.open(addr);
-
-
BinaryMessagebm=(BinaryMessage)mc.newMessage
-
(MessageConnection.BINARY_MESSAGE);
-
if(url!=null)
-
bm.setAddress(url);
-
bm.setPayloadData(msg);
-
conn.send(bm);
-
}
-
catch(Exceptione){
-
}
三类消息传递
WMA消息的传递可以分成:服务器到手机、手机到服务器和手机到手机。
在服务器到手机消息传递中,CRM应用程序可以向手机应用程序发送数据,手机应用程序可以接收数据并用对用户友好的方式呈现数据。在手机到服务器的消息传递中,手机应用程序可以向服务器发送数据(HTTP连接也可以做这项工作,但HTTP连接不可能总是存在)。在手机到手机的消息传递中,用户可以向好友的手机发送应用程序数据或游戏数据,进行游戏项目交换及其他操作。
上面大部分文字摘自www.ibm.com/developerworks/cn/java/wi-arch32.html
整理成一个工具类
java代码
-
publicfinalstaticvoidsendTextMessage(Stringphone,Stringtext)
-
throwsIOException{
-
checkPhoneNumber(phone);
-
MessageConnectionconn=(MessageConnection)Connector.open("sms://"
-
+phone);
-
TextMessagemsg=(TextMessage)conn
-
.newMessage(MessageConnection.TEXT_MESSAGE);
-
msg.setPayloadText(text);
-
conn.send(msg);
-
}
-
-
publicfinalstaticvoidsendTextBinary(Stringphone,byte[]text)
-
throwsIOException{
-
checkPhoneNumber(phone);
-
MessageConnectionconn=(MessageConnection)Connector.open("sms://"
-
+phone);
-
BinaryMessagebm=(BinaryMessage)conn
-
.newMessage(MessageConnection.BINARY_MESSAGE);
-
-
bm.setAddress(phone);
-
bm.setPayloadData(text);
-
conn.send(bm);
-
-
}
-
-
privatefinalstaticvoidcheckPhoneNumber(Stringphone)
-
throwsPhoneNumberException{
-
if(phone==null
-
||phone.equals("")){
-
thrownewPhoneNumberException("手机号码不能为空!");
-
}
-
try{
-
Integer.parseInt(phone);
-
}catch(NumberFormatExceptionn){
-
thrownewPhoneNumberException("手机号码必须为数据!");
-
}
-
}
这篇文章会持续更新中,请关注
更新一。对Email的支持:有用过手机支持email浏览是比较痛苦的。就单纯拿我的nokia6630来说吧。设置就一大堆了。搞的我都不想去设置了。其实对于手机浏览email来说我们直需要其中的文本信息就ok了(如果邮件带有附件(一般附件是word,图片等)对于智能机来说,是可以通过安装office来支持浏览的,但很辛苦。
该怎么样来省去那些麻烦的设置呢,我们只需要用户提供一个邮箱地址,密码就可以登录到邮箱跟发邮件了,对于那些协议的设置我们来帮它们做。
比如设计一个自己的邮件转发服务器。一个邮件客户端(j2me)实现,然后客户端的所有请求都是通过我们这边的服务器进行工作,我们可以把那些邮件数据进行压缩,后在传送,这样不仅可以提高速度,而且处理起来也是比较方便的。
过段时间,决定自己实现一个这样的结构。
分享到:
相关推荐
**JSR-000257 Contactless Communication API 1.0 Final Release** 是一个针对移动设备,尤其是Java ME(J2ME)平台的规范,它定义了如何在这些设备上实现非接触式通信(NFC)技术。NFC,全称Near Field ...
**WMA 2.0 (JSR 205):无线多媒体应用框架** WMA 2.0,全称为Wireless Media Application 2.0,是Java Specification Request (JSR) 205的一部分,它是一种标准的API,旨在为移动设备提供高效能、低延迟的多媒体...
综上所述,JSR205_WirelessMessagingAPI(WMA) 是一项重要的技术规范,为Java ME开发者提供了一套强大的工具和API,使得他们能够在移动设备上实现无线消息传递功能。通过遵循这一规范,开发者不仅能够构建出更加丰富...
- 这个API允许J2ME应用程序通过蓝牙进行无线通信,包括设备发现、连接、数据传输等功能。 4. **JSR 180: Web Services for J2ME** - 提供了在J2ME平台上开发和消费Web服务的能力,支持SOAP和WSDL。 5. **JSR 205...
通过这个工具,可以快速检测手机是否支持常用的JSR,如JSR-118、JSR-135、JSR-75(PIM,个人信息管理)、JSR-120(WMA,无线消息应用)、JSR-180(Web服务客户端支持)等。 测试过程通常涉及以下步骤: 1. **初始...
JSR-180提供了Wireless Messaging API,使J2ME应用可以发送和接收SMS/MMS消息。JSR-172则定义了Web服务客户端API,让嵌入式设备能够利用Web服务进行数据交换和远程调用。 **总结** J2MEAPI速查手册是一个实用的...
1. **JSR-82**:Java Specification Request 82是Java ME平台的一部分,定义了一套API,使Java开发者能够在支持蓝牙的设备上开发无线应用。这些API包括连接管理、服务搜索、数据传输等功能。 2. **JNI(Java Native ...
J2ME中的WMA(Wireless Messaging API,JSR-120)允许开发者创建能够接收和发送SMS、MMS消息的应用。理解和使用SMPP(Short Message Peer-to-Peer)协议是实现高效无线消息传递的关键。 七、Java Wireless Toolkit...
开发者可以利用JSR-82(Java API for Bluetooth)进行蓝牙设备间的通信,或使用JSR-180(Wireless Messaging API)发送和接收SMS消息。 2. **游戏开发**:J2ME的游戏开发通常基于MIDP的Game API,它提供图形绘制、...
在Java中,蓝牙通信主要依赖于Java Bluetooth API(JSR-82),它包括了`javax.bluetooth`和`javax.microedition.io`这两个包。这两个包提供了各种类和接口,用于搜索蓝牙设备、建立连接、发送和接收数据等。 1. **...
6. **无线和蓝牙通信**:JSR-82(Java Bluetooth API)和JSR-180(WMA - Wireless Messaging API)提供了与蓝牙设备和其他无线服务交互的能力。 7. **存储管理**:RecordStore API允许开发者在设备上存储数据,即使...
在Java中,蓝牙通信主要通过Java Communications API(JavaComm)或者Java Bluetooth API(JSR-82)来实现。本文将深入探讨这两个API,并详细阐述如何使用它们进行蓝牙开发。 JavaComm API,虽然最初设计用于串口...
**JSR 184 API** 是Java ME(J2ME)平台中的一项规范,全称为"Mobile 3D Graphics API",它为移动设备提供了3D图形编程接口,使得开发者能够在小型设备上创建和展示复杂的三维图形。这项技术极大地扩展了J2ME应用...
在Java中,蓝牙API主要由Java Micro Edition (Java ME) 的JSR-82规范定义,同时也被部分Java Standard Edition (Java SE) 的实现所支持。本文将深入探讨Java蓝牙API的基本概念、核心组件以及如何进行蓝牙功能的调用...
JSRs是J2ME扩展的标准,如JSR-184(M3G,3D图形),JSR-120(WMA,无线消息API)和JSR-226(SVG Tiny,矢量图形)。这些扩展为开发者提供了额外的功能,以满足特定的应用需求。 9. **开发工具** 开发J2ME应用通常...
根据文档标题“蓝牙API帮助文档”及描述“蓝牙 API 帮助文档 JSR82-spec_1.1.1.pdf”,我们可以了解到这是一份关于蓝牙API(Application Programming Interface,应用程序编程接口)的技术文档,主要面向开发人员...
在探讨《使用J2ME蓝牙API开发移动游戏》这一主题时,我们首先需要理解几个核心概念:J2ME(Java 2 Micro Edition)、蓝牙技术、以及如何利用JSR-82标准来创建支持蓝牙功能的多玩家游戏。本文将深入剖析这些知识点,...
4. **JSR-82:Java Bluetooth API**:允许J2ME应用通过蓝牙进行无线通信,支持设备发现、连接建立、数据传输等功能。 5. **JSR-185:Mobile 3D Graphics API (M3G)**:为移动设备提供了3D图形渲染和动画功能,让...
要实现电话呼叫功能,我们需要使用JSR-120(Mobile Information Services Signaling Protocol,MISDP)或者JSR-253(Mobile Telephony API)。 1. **JSR-120 MISDP**:这个API提供了与手机服务提供商交互的能力,...
4. **Connection API**:JSR-82提供了蓝牙和红外线的连接支持,使得设备间的数据交换成为可能。 5. **File Connection API (FC)**:JSR-75允许MIDlets访问设备的文件系统,进行读写操作。 6. **Java Game API**:...