用户: 密码: 答案:   我要注册   忘记密码

加入收藏  设为首页

开发文档

CNJM首页

业界新闻

手机软件

终端应用

资源下载

EclipseME

CNJM论坛

                 

频道列表

J2ME开发 176篇
服务器端开发 33篇
JAVA语言 71篇
游戏与图形 101篇
WindowsMobile开发 6篇
Symbian开发 61篇
Brew开发 36篇
其它开发平台 6篇

热点文章

四种JAD生成器之比... 53944次
手机JAVA入门讲座 32751次
手机游戏毕业设计论文 29569次
各厂商SDK和模拟器... 20319次
Java手机机型对应表 19251次
一个关于CMNET和CM... 18456次
2005年毕业论文---... 16713次
手机JAVA MIDP2.0讲座 16405次
JAVA手机性能参数大全 14541次
手机JAVA中级讲座 12653次
J2ME程序开发新手...  11379次
我的第一个Java手...  11187次

文章搜索

搜 索
按 照
频 道
  
用J2ME收发短信 -- Wireless Messaging API
编辑:rocks    审核:rocks    文章来源:51cto.com
关键词:wma    发表日期:2006-10-14 02:50:16    浏览次数:8605次
本文版权归原作者,中国JAVA手机网收录本文的目的是让更多人阅读到此文章。转载请注明出处为中国JAVA手机网<www.cnjm.net>
来自:http://www.cnjm.net/tech/article2857.html

[出处:51cto.com整理]

JAVA手机网[www.cnjm.net]
作者:Eric Giguere  
JAVA手机网[www.cnjm.net]

【导读】本文将简要的介绍Wireless Messaging API(JSR 120)的一些基本知识

Wireless Messaging API属于J2ME体系的一个Optional Package,通常简称为WMA,使用它可以通过无线连接发送和接受短文本信息或者是二进制信息。WMA基于Generic ConnectionFramework(GCF),GCF在Connected Limited Device Configuration (CLDC)中定义,GCF提供了一个抽象的框架用于履行输入和输出操作,GCF也是Connected Device Configuration (CDC)的一部分,因此何J2ME-enabled设备上使用WMA。

应用WMA,意味着你可以使用cellular telephones(蜂窝电话)或者是相似的设备通过各种无线网络发送和接收短信息,而不管这个无线网络是基于GSM还是CDMA。值得一提的是,WMA还支持ShortMessage Service (SMS,短信息服务)和 Cell Broadcast Short Message Service (CBS).尽管WMA消息和数据报(datagrams)十分相似,但是WMA并没有使用GCF框架中定义的数据报接口(datagraminterfaces),因为这种接口是为UDP Connections而设计的。WMA在javax.wireless.messaging包中定义了一套全新的接口,用于接收和发送短消息。
JAVA手机网[www.cnjm.net]

在WMA中,为了接收或者是发送短消息,你必须首先获得一个MessageConnection接口的实例,调用javax.microedition.io.Connector的open()方法可以返回MessageConnection接口的实例,参数是字

符串型的URL,该URL和HTTP协议中的URL十分相似,它必须指定所使用的协议(SMS或者是CBS),目标电话的号码,端口号等等,例如下面的URL都是合法的URL:

1. sms://+417034967891

JAVA手机网[www.cnjm.net]
2. sms://+417034967891:5678

3. sms://:5678

4. cbs://:5678
JAVA手机网[www.cnjm.net]

在上述URL串中,第一个和第二个URL串指定了目标设备(移动电话)的号码,第二个URL串还指定了端口号,如果端口号没有被指定,那么WMA将会使用目标设备上缺省的文本信息端口(text messaging port),上述两种情况主要用于发送短信息的情况。第三个URL串表明指定的是本机的端口,这种情况主要用于接收短信息。第四个URL串也是指定本机的端口,这种情况主要适用于监听网络中广播信息。第三个URL串和第四个URL串的主要区别在于所哦使用的协议不一样。

JAVA手机网[www.cnjm.net]
下面我们来看一段简单的创建SMS客户端的代码:

import javax.microedition.io.*;

JAVA手机网[www.cnjm.net]
import javax.wireless.messaging.*;

JAVA手机网[www.cnjm.net]
.....

MessageConnection conn = null;

String url = "sms://+417034967891";

try

{

conn = (MessageConnection) Connector.open( url );

// do something with the connection

}

catch( Exception e )

{

// handle errors
JAVA手机网[www.cnjm.net]

}

finally

{

if( conn != null )

{

}}

现在SMS客户端是创建起来了,也就是说你手上的设备已经和服务器建立了连接,那么如何发送短信息呢?首先,你应该使用MessageConnection接口的newMessage()方法创建一个空(empty)的消息,然后再设置该消息的PayloadText(也就是需要发送的文本或者是二进制数据),最后调用MessageConnection的send()方法将短信息发送到目标设备中去。请看下面的代码:

public void sendText( MessageConnection conn, String text)

throws IOException, InterruptedIOException {
JAVA手机网[www.cnjm.net]

TextMessage msg = conn.newMessage( conn.TEXT_MESSAGE );

msg.setPayloadText( text );

conn.send( msg );

}
JAVA手机网[www.cnjm.net]

如果是发送二进制格式的数据,那么代码略有不同:

public void sendBinary( MessageConnection conn, byte[] data)

throws IOException, InterruptedIOException {

BinaryMessage msg=conn.newMessage( conn.BINARY_MESSAGE);

当然了,你所能发送的数据量是有限的,一般来说,SMS文本信息可以包含160或者是70个字符,

这依赖于你使用何种字符编码,如果是二进制数据,那么容量是140字节(Note:The WMA requires support for message concatenation, however, which means that these limits are actually at least three times higher.)。同时,你可以使用MessageConnection接口的numberO fSegments()

方法决定某一个特别的短信息能否被发送,并且需要把这条信息拆分为多少个信息段(message segments)。

上面介绍了如何应用WMA发送短信息,应用WMA接收短信息更加简单,当打开一个Server Connection后(此时建立connection时,不需指定电话号码,只需要指定协议以及监听端口号),直接调用MessageConnection接口的receive()方法,该方法返回在当前设备的指定端口收到的下一个短信息。如果没有短信息到达,那么该方法将会阻塞,并等待下一个短信息的到达,或者由另一个不同的线程关闭此连接。请看下面的示例代码:
JAVA手机网[www.cnjm.net]

JAVA手机网[www.cnjm.net]
import java.io.*;

import javax.microedition.io.*;

import javax.wireless.messaging.*;
JAVA手机网[www.cnjm.net]

MessageConnection conn = null;

String url = "sms://:5678"; // no phone number!

try {

conn = (MessageConnection) Connector.open( url );

while( true ){

Message msg = conn.receive(); // blocks

JAVA手机网[www.cnjm.net]
if( msg instanceof BinaryMessage ){

JAVA手机网[www.cnjm.net]
byte[] data =

((BinaryMessage) msg).getPayloadData();

// do something here

} else {

JAVA手机网[www.cnjm.net]
String text =

((TextMessage) msg).getPayloadText();

// do something here

}}

}

catch( Exception e ){

// handle it

}

finally {if( conn != null ){

try { conn.close(); } catch( Exception e ){}

}

}

WMA的任务只是接收和发送短信息,并不去解释它们。通常来说,应用程序之间会来回发送二进制数据类型的信息,java.io包的DataInputstream,DataOutputstream,ByteArrayInputstream

和ByteArrayOutputStream 类在对这些二进制数据解码和编码时十分有用。

访问下面两个网址可以获得更多关于WMA的信息:
JAVA手机网[www.cnjm.net]

[1]http://java.sun.com/products/wma/

[2]http://jcp.org/aboutJava/communityprocess/final/jsr120/index.html.

注:本文主要根据Eric Giguere写的Wireless Messaging API Basics翻译而成,原文可以参见

Wireless Developer Newsletter(October 15, 2002),具体网址为:http://wireless.java.sun.com/midp/ttips/wma/

本文并非字字照译,而只是译其大意而已,文中代码均没有经过验证,仅供参考而已。如果有问题,请和翻译联系:javalover.bbs@bbs.pku.edu.cn。
来自:http://www.cnjm.net/tech/article2857.html

相关文章
    使用Push短信息自动启动JAVA移动程序  [2006-10-14]
最新评论
网站简介  |  关于版权  |  广告服务  |  网站地图  |  联系我们
Copyright © www.CNJM.net, All rights reserved
中国JAVA手机网 版权所有
ICP备案:京ICP备041452