MIDlet-Push-<n>Q?/b>push注册属性名U。MIDlet套g中可以包含多条push注册?lt;n>的数g1开始,q且对于附加的条目必M用连l的序数。第一个发现的~失条目中止列表。Q何剩余的条目都会被忽略?br />ConnectionURLQ被Connector.open()使用的连接字W串?br />MIDletClassNameQ负责连接的MIDlet。指定的MIDlet必须使用MIDlet-<n>记录在描q文件或jar文g的manifest中登记过?br />AllowedSenderQ一个指定的qo器, 它将限制哪些发送者能够能正当启动h的MIDlet?br />
MIDP 2.0 规范定义了数据报和socket带内q接的语法。当其他规范为其他连接类型定义push 语义Ӟ它们必须既定义过滤器域期望的语法Q又定义q接URL字符串的期望格式?br />
在jad文g中,一个push注册的典型例子,使用socketq接Q类g如下Q?br />MIDlet-Push-1: socket://:77, com.sample.SampleApplication, *.
q个CZ描述W条目在77端口处保存一个流套接字,q且允许所有的发送者?br />
从服务器推信息到Ud讑ֈ会带来一些问题:如果我们惛_送信息到一个在指定端口注册了监听流套接字的特定讑֤Q我们必ȝ道那个移动电话的无线|络IP。因为在无线|络中,很多手机不用始l连接环境(有时候,提供商不支持讑֤中网l中的静态IPQ,发送信息到讑֤是有问题的。如果我们不知道讑֤的无UIPQ我们将不能使用套接字连接从服务器发送信息到讑֤?br />
短信服务QSMSQ在q种情况下派上了用场。用SMSQ我们指定目标设备的电话LQ因此在q种情况下,我们不需要知道设备的IP地址。但是,使用SMS作ؓ触发器同样会带来一些问题:因ؓMIDP2.0规范只定义了针对数据报和套接字带内连接的语法Q而没有针对SMSq接的,所以不保证所有支持MIDP2.0的设备都能用SMS作ؓ触发器来q行push注册。但无线消息APIQWMA1.1Q-一个在MIDP上能支持SMS的的可选包Q现在得到很多移动设备的支持Q所以有更大的可能性,SMS作ؓpush注册机制的触发器得到很多设备的支持。对于这文章,我用Nokia 6600Ud电话Q它是支持SMS作ؓpush注册机制的触发器的?br />
另外Q从服务器发送一条SMS消息到设备不是简单直接的Q因为有很多途径存在。SMS服务提供商提供APIQ或者暴露服务URLQ,通过q些API你能从你的服务器端应用程序发送消息到你指定的Ud电话上。但q种Ҏ依赖于SMS服务提供商和它特D的计划。可选的方式是用一个GSM调制解调器,q样你需要GSM调制解调器与你的服务器端应用E序q行交互。在q篇文章中,我将使用一个开源的产品QSMSLib for Java V1.0Q原名jSMSEngineQ,它能使GSM调制解调器与你的Java服务器端E序q行交互?br />
另一个在此需要注意的要点是一条简单的SMS消息不会激zMIDlet。我们必d送SMS消息到MIDlet注册监听的特定的端口。因此被用来发送SMS消息的YӞ或SMS服务提供商)必须能够它发送到讑֤指定的端口。SMSLib for Java v1.0 支持q一功能?br />
当我们用GSM调制解调器方案,我们必须了解GSM调制解调器将在内部用SIMQ订戯别模块)卡来发送SMS消息。SIM卡依赖于某个Ud服务提供商。因此每条SMS短信带来与从常规GSMUd电话发送消息同Lp。正相反Q对于一个企业应用Q依赖于服务计划Q,通过提供商的SMS|关发送批量SMS消息会被证实更节省开销。但是,如果应用E序不需要发送大量SMS消息来出发MIDletQ那么GSM调制解调器方案会是有效的开销Qƈ能从Ud服务提供商那里取消特D的扚wSMS服务依赖?br />
虽然我徏议ؓ了近期的产品使用购买一个单独的GSM调制解调器,但是试此行Z要求够买。通常圎ͼ很多GSMUd电话模型带有一个内|的GSM调制解调器。那些移动模型中的Q何一个都能够作ؓGSM调制解调器,来代替单独的调制解调器。在q篇文章中,我用另外一个Nokia 6600Ud电话Q而不是一个单独的GSM调制解调器,因ؓNokia 6600有一个内|的GSM调制解调器?br />
现在Q让我们开发一个实例程序,是我们能够从一个Java服务器端应用E序发送一条SMS消息C个移动电话的指定端口Qƈ自动启动Ud讑֤中的一个MIDlet?br />
使用push注册特征开发客LMIDlet
Z开发客LQ我们用Sun Java Wireless ToolkitQ原名ؓJ2ME Wireless ToolkitQ。我使用版本2.2。这个品是免费的,可以从Sun的网站下载。ؓ了安装和q行此工具包Q你必须在你的机器上装有J2SE 1.4.2_02或更新的版本?br />
我用Windows 2000 Professional 操作pȝ?br />
安装Sun的工具包后,按照如下描述的步骤:
1Q从开始菜单打开KToolBarQ选择E序Q然后J2ME Wireless Toolkit 2.2Q然后KToolbar。将会打开一个应用程序窗口,如图2所以?br />

?. 打开KToolbar
2Q现在,在刚才打开的窗口中点击新徏工程图标。会打开一个弹出窗口;在那里你可以指定工程名称和MIDletcd。在工程名称中输入MySamplePushRegistryProjectQ在MIDletcd中输入com.sample.MySamplePushRegistry?br />

?. 新徏一个工E?br />
3Q在步骤2后,会自动出现另一个弹出窗口,它将允许你设定项目的其他讄。确保你在API 选择标签中。在此标{中Q从目标q_下拉菜单中选择JTWIQ如果还没有选择Q。同L保CLDC 1.0单选按钮被选中。不要钩选Mobile Media API多选框Q因Z会用Q何跟多媒体有关的APIQ。请参考图4?br />

?. 讄API首选项
4Q现在进入push注册标签。点L加按钮。将会出C个弹出窗口。在q接URL域中输入sms://:50001Q在cd中输入com.sample.MySamplePushRegistryQ在允许发送者域中输?。请参考图5?br />

? 讄push注册的属?br />
5Q在步骤4后,一个条目将会被加入到父H口中。如?所C?br />

?. 讄push注册的属性(l)
6Q现在进入许可标{。单L加按钮。从许可树中选择javax/microedtion/io/Connector/smsq单击OK。重复相同 的步骤来添加许可javax/wireless/messaging/sms/receive ?javax/microedtion/io/PushRegistry?br />
7Q在步骤6后,三项许可被d到应用程序中。如?所C?br />

?. d许可
8Q现在进入用户定义标{。这里,我们d用户定义的变量,q将包含SMS端口。从我们的程序,我们查阅此用户定义变量来dSMS端口。在此标{中Q单L加按钮。打开一个弹出窗口。输入SMS-Port作ؓ属性名U。选择OK。出C最初的弹出的窗口。输?0001作ؓSMS-Port的倹{如?所C?br />

?. d定制属性SMS-Port
9Q现在,在设|窗口中单击OK。这个动作将带回到KToolbar?br />
10Q在步骤9后,如果你观察由以上步骤产生的jad文gQC:/WTK22/apps/MySamplePushRegistryProject/bin/MySamplePushRegistryProject.jadQ假设J2ME Wireless Toolkit 2.2被装在目录C:/WTK22中)Q你会找到在前面步骤中设定的完整配置。所有条目中最重要的一个如下:MIDlet-Push-1: sms://:50001, com.smaple.MySamplePushRegistry, *. 此条目确保你的应用程序监?0001端口上的SMS消息?br />
现在Q让我们着gMIDlet应用E序的代码。这里,我仅仅提供MIDlet的一部分代码片断?L资源来下载在此应用程序中使用的所有代码?br />
public class MySamplePushRegistry extends MIDlet
implements CommandListener, Runnable, MessageListener {
//....
public void startApp() {
smsPort = getAppProperty("SMS-Port");
String smsConnection = "sms://:" + smsPort;
if (smsconn == null) {
try {
smsconn = (MessageConnection)
Connector.open(smsConnection);
smsconn.setMessageListener(this);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
display.setCurrent(resumeScreen);
}
public void notifyIncomingMessage(MessageConnection conn) {
if (thread == null) {
thread = new Thread(this);
thread.start();
}
}
public void run() {
try {
msg = smsconn.receive();
if (msg != null) {
if (msg instanceof TextMessage) {
content.setString(((TextMessage)msg).getPayloadText());
}
display.setCurrent(content);
}
} catch (IOException e) {
e.printStackTrace();
}
}
//other methods to follow
}
在这个片断中Q如下要点值得注意Q类MySamplePushRegistry集成了MIDlet。这个类实现了CommandListenerQRunnable和MessageListener接口。在MIDlet的startApp()Ҏ中,我们使用getAppProperty()Ҏ得到SMS-Port属性的倹{我们也使用Generic Connection FrameworkQGCFQ创Z一个连接来监听SMS消息。GCF的Connectorcȝopen()Ҏ创徏了SMSq接。如果一个消息到达了QnotifyIncomingMessage()Ҏ会被调用Q它会创建和启动一个线E(如果q没有被创徏Q。在U程的run()Ҏ中,E序{待一条消息(smsconn.receive()Q。当消息被接受到Q我们得到原始的消息q在AlertcM讑֮消息。在现实生活的应用程序中Q用户通常打开一个屏q来处理消息?br />
一旦你的代码准备好了,使用KToolbar中的创徏图标来创建它。在~译和无错误预验证创Z后,你需要把应用E序打包成一个JAR。ؓ了完成这个Q务,选择工程菜单Q然后包Q然后创建包?br />
在把应用E序部v到真实设备之前,我们先测试程序是否在模拟器中q{正确。选择工程菜单Q然后通过OTAq行。这个步骤实际上是模拟MIDlet的over-the-air安装。图9的顺序图描述了全部的q程。保持此模拟器窗口打开?br />

?. 通过over the airҎ在模拟器中安装应用程?br />
现在Q在KToolbar中进入文件菜单,q择Utilities。得C个弹出窗口,如图10所C?br />

?0. 打开Utilities
单击WMAQ然后打开控制台。打开了另一个弹出窗口:

?1. 打开WMA Utilities 控制?br />
在窗口中选择发送SMS按钮。窗口的内容会改变Q如?2所C。在选择客户端区域内选择+5550000作ؓ电话L。在端口文本框中Q输?0001。在消息域中Q输入Hi Test Message。现在单d送按钮?br />

?2. 从Utilities发送SMS消息
如果在以上步骤中Q每一件事都运行良好,那么模拟器窗口,如图13所C,会昄一个消息到达了模拟Ud电话Q告诉用h息到辑ֈ了,q等到批准?br />

?3. 模拟器MIDlet被SMS消息Ȁz?br />
如果你在模拟器上选择YesQMIDlet会自动启动,”Hi Test Message”会昄在模拟器中,如图14所C?br />

?4. 模拟器MIDlet接受到SMS
接下来的步骤事在真实讑֤上安装MIDlet。你可以使用OTA安装应用E序。详l内容请查阅Sun的工具包文档。除了OTAQ我们可以电~?U外U?蓝牙技术来安装MIDletQ如果设备支持那些选项。作Z个客L讑֤Q我使用Nokia 6600Q这是支持红外线技术的Qƈ且因为我有一个红外线适配器,我用红外线技术在Nokia 6600中安装MIDlet?br />
如果以上步骤q行良好Q你的客L应用E序准备就l了。现在是时候来开发服务器端应用程序了Q实际上Q它发送SMS消息l监?0001端口的MIDlet?br />
开发服务器端应用程序来SMS消息发送到特定的设备端?br />如前所qͼZ开发服务器端与GSM调制解调器交互的的代码,我用开源的SMSLib for JavaQ?它用关注指令(AT指oQ与GSM调制解调器进行交互。它同时也用Java通信API或RxTx与用的操作pȝ通信Qƈ与外部设备(GSM调制解调器)交谈来发送AT指o?br />
Z发送消息到指定的端口,用户数据和协议数据单元(PDUQ的用户数据标题指示QUDHIQ域都必被修改。SMSLib在内部完成了它,所以发送SMS消息引v的复杂度都被包装在SMSLib的代码内。如果你对观察消息是如何被正发送的感兴,你可以独自仔l检查SMSLib的代码?br />
按照如下的步骤来完成服务器的~码和部|Ԍ
1Q从SMSLib|站下蝲SMSLib代码。下载时Q确保你下蝲的是SMSLib-Java-v1.0.1.zip。SMSLib for Java可以跟Java通信API或RxTx一起用。最q,Sun撤消了了对Java通信API Windows版的支持Q所以用RxTx会更好。但如果你已l有了Java通信APIQ你同样可以用它和SMSLib一赯行。在q篇文章中,我将详述以上两种q行实例E序的方法?br />
2Q以Java通信API 2.0作ؓ开始,首先Q确保你已经正确安装了API。解压javacomm20-win32.zip。在commapi子目录中Q你找到如下文Ӟ
 javax.comm.properties
 win32com.dll
 comm..jar
把javax.comm.properties拯C的Javaq行时环境的lib目录中。把win32com.dll拯C的JRE的bin目录中。当q行M使用SMSLib的程序时Q确保comm.jar在classpath中?br />
Z保证Java通信API被正的安装了,从命令框中进入到commapi\samples\BlackBox目录中。按如下方式讄PATH变量Q以我ؓ例,JRE的家目录为C:\j2sdk1.4.2_03\jre。根据你的JRE讄做相应的改变?br />
讄PATH=.;c:\j2sdk1.4.2_03\jre\bin;。现在,使用如下命o来运行Java 黑盒E序Q?br />java -classpath .;../../comm..jar;BlackBox.jar; BlackBox?br />
如果Java通信API被正的安装了,那么如图15所C,会出C个显CZ机器的可用串口(COM端口Q的SwingH口。关闭窗口之后,命o框将会包含一些跟你可用的COM端口相关的行Q如下面的示例命令提C出所C。记住,依赖于你的PC上的可用端口QSwingH口和命令行提示的内容可能会有变化。但重要的是Q如果你能够看到GUI和在命o提示框中的如下行Q就象下面所C)Q你可以假设Java通信API已经正确安装了。在q个试之后Q关闭SwingH口来中止黑盒程序?br />

?5. 试Java通信API的安?br />
实例命o提示框输出:
COM1: PORT_OWNED
COM2: PORT_OWNED
Closing port 1 (COM2)
Closing COM2
Closing port 0 (COM1)
Closing COM1
3Q现在,是时候把GSM调制解调器连接到你的电脑上了。我使用一部Nokia 6600Ud电话作ؓGSM调制解调器。Nokia 6600没有串口q接器(COM端口q接器)。但是,它提供了U外U技术连接到电脑Q然后作为GSM调制解调器。如果你有一部有串口直接q接器的电话Q那样用v来会更简单。一般地Q 实际的GSM调制解调器会提供串口q接器。但是如果你的设备缺串口连接器Q但包含一个内|的GSM调制解调器ƈ能用红外线或蓝牙技术连接,q种选择也能起作用?br />
Z在没有物理COM端口的情况下Q在功能上实现COM端,你必d一个虚拟的COM端口映射C的红外线或蓝牙连接上。SMSLib需要一个兼容的GSM电话或GSM调制解调器。如果提供了调制解调器的能力Q大多数GSM电话都能被用。SMSLib使用串行q接(物理或模拟,比如蓝牙Q红外线QUSB{?来与GSM调制解调器通信。通过Nokia 6600Q?你可以用SMSLib来发送SMS消息Q但是因为Nokia 6600把传入的消息储存在记忆卡里而不是SIM卡中Q用这U模式将不能接受到这些消息。同PNokia 6600不允总记忆卡中使用AT指o来读取消息。但是,我们仅仅需要发送SMS消息来激zL们的MIDletQNokia 6600能够成功的完成这些(不需要接收SMS消息Q。对于用红外线或蓝牙技术连接的电话来说Q最重要的是红外线或蓝牙连接映到一个虚拟COM端口。参考你的移动电话的文档Q查明它是否支持虚拟COM端口映射?br />
以我ZQ我在我的PC上安装了Nokia PC 套g。ؓ了从我的PCq接Nokia 6600Q我使用一个外部USBU外适配器。因此,Zq种情况Q我也在PC上安装了U外UK动?br />
现在Q我用PC上的USB端口q接到外部红外适配器。在Nokia 6600讑֤上,我选择菜单Q然后连接,然后调制解调器。通过U外U连接的选项在调制解调器下面。现在,我选择选项“连接”,q把Ud电话攑֜U外适配器的有效范围之内?br />
4Q下一步是验证从PCQ我们能够用AT指o讉KGSM调制解调器。ؓ此,选择开始菜单,然后E序Q然后附Ӟ然后通信Q然后超U终端。会打开一个对话框Qƈh一个逻辑名称。提供Q何你愿意提供的名字。ؓ了方便,我提供名字“GSM Modem”。选择OK?br />

?6. 打开l端
5Q另一个弹出窗口出现。在使用q接的下拉菜单中Q选择COM端口名称Q虚拟的或实际的Q,GSM调制解调器将通过此端口连接到PC。以我ؓ例,是COM4?br />

?7. 在超U终端中选择COM端口
6Q在下一个对话框中(COM端口的属性)Q只需单击OK?br />
7Q现在,你会被带C个窗口,你将在此H口中输入一些命令(以我们ؓ例,我们输入AT指oQ。输入如下命令来试q通性-但是CQ当你输入指令的时候,不会在控制台中写入Q何东西:AT+CPMSQ??br />
要点Q不要在l端中输入Q何未知的命o。这可能会永久性损坏你的移动设备或擦去所有的数据?br />
如果一切顺利,你将能看C些输出,如图18所C。输出可能会不尽相同Q但是没有输出,输出错误Q或l端没有响应都代表这q通性的错误?br />

?8. 在超U终端中执行AT指o
8Q现在从呼叫菜单Q用断开q接命o从超U终端断开q接?br />
9Q完成了如上的步骤后Q我们可以准备写JavaCZE序了。此E序发送SMS消息到我们刚才配|的的GSM调制解调器的指定端口上:
import org.smslib.*;
public class SendMessageWithPortsSMSLib {
public static void main(String[] args) {
CService srv = new CService("COM4", 9600, "", "");
System.out.println("SendMessage(): sample application.");
System.out.println(" Using " + srv._name + " v" + srv._version);
try {
srv.setSimPin("0000");
srv.connect();
srv.setSmscNumber("");
COutgoingMessage msg =
new COutgoingMessage("+9198301...", "Message from smslib API.");
msg.setMessageEncoding(CMessage.MESSAGE_ENCODING_7BIT);
msg.setSourcePort(0);
msg.setDestinationPort(50001);
srv.sendMessage(msg);
srv.disconnect();
}
catch (Exception e) {
e.printStackTrace();
}
System.exit(0);
}
}
在如上的代码片断中,我们首先使用4个参数来创徏cCService的一个实例。第一个参CؓCOM端口的名U。(以我ZQ这里是COM4Q因为我的GSM调制解调器是q接C个虚拟的COM端口的。确保根据你的COM端口名称来改变这里的倹{)W二个参数指定L特率。当调制解调器连接时你会发现q一限制。第三个参数指定Ud/GSM调制解调器的构成。第四个参数指定模式。在一个特定的构成和模式需要不同的AT指o集来与GSM调制解调器交互的地方Q第三和W四参数有时启动很重要的作用。例如,对于Sony Ericsson模式Q需要一个不同的AT指o集和逻辑Q因此,伴随着jSMSEngine发行版,你能扑ֈ一个单独的对于Sony Ericsson的处理包。对于特定类型的构成和模式,jSMSEngine有不同的处理包。对于NokiaQ缺省的处理包对于Nokia 6600 和我们的目的已经_好了。因此,我没有对W三和第四个参数指定M倹{?br />
CService被初始化之后Q我们用connect()Ҏq接到GSM调制解调器。我们设|SMSC数字QSMS中心数字QؓI。这会被SIM卡得到。在那之后,我们使用cCoutgoingMessage()创徏一个发出的消息。COutgoingMessage()的构造函数需要两个参敎ͼ发送消息的讑ֈ数字和消息本w。在一个典型的实际的应用程序中Q一些类g数字代码的指C符会被作ؓSMS消息发送;Ҏ那个代码Q在MIDlet端会发生一些动作。另外一个要ҎsetDestinationPort()ҎQ在q里我们讑֮目标端口?br />
?9展示了详l的建立q程?br />

?9. 详细的徏立过E?br />
重要注解QSMSLib在CLogger.java中用了J2SE 5.0的API。CLogger.java中有一行用PrintStream的构造函敎ͼq用java.io.Filecd作ؓ参数。这个PrintStreamcM的构造函CJ2SE 5.0才有支持。但是由于我使用J2SE 1.4Q我把那一行从Qstream = new PrintStream(new File(filename)); ҎQstream = new PrintStream(new FileOutputStream(filename));
改变之后Q我构徏了SMSLib提供的源代码Qƈ创徏了新的JAR使用JRE 1.4.2?br />
10Qؓ了编译示例程序,保在你的classpath中有新的JARQ是你在修改CLogger代码后生成的Q和comm.jar。然后编译示例应用程序?br />
11Q编译完成之后,q行应用E序。确保之前步骤提到的JAR在classpath中。如果一切顺利,你能够看C安装在另外一个设备中MIDlet已经自动启动了,q显CZ的消息?br />
现在Q让我们看看如何使用RxTx来代替Java通信API 2.0。你可以从SMSLib下蝲RxTx。当使用RxTx的时候,我们需要注意如下几点:
1Q拷贝RXTXComm.jar刎ͼJDKDIRQ\jre\lib\ext目录Q拷贝rxtxSerial.dll文g刎ͼJDKDIRQ\jre\bin目录?br />2Qؓ了用,SMSLib同Java通信API一h包,但是q行一部分的代码修改Q我们也能让它跟RxTx一起用。ؓ了让SMSLib同RxTx一起用,修改CSerialDriver.javaq删除行javax.comm.*;。添加行import gnu.io.*;。然后重新生成?br />3QRxTx也支持Win32。当我写q篇文章的时候,RxTx能很好的支持物理串行q接Q但是对于“虚拟”串行端口则有些例外Q例如,通过蓝牙/U外U?USBq接模拟串行端口。但是,在显C生zȝ情况中,你不会用一个移动电话作制解调器Q而是一个真实的GSM调制解调器,它将通过真实的COMQ串行)端口来连接。这不会成为问题。现在,以我ZQ在发送SMS消息时我接受C一些错误,因ؓ我的U外U连接有一个虚拟的端口映射。ؓ了消除那些错误,我在CSerialDriver中注释掉了一些行。特别的Q找到outStream.flush();Q注释掉Q然后重新生成?br />4Q现在,按照上面列表中的步骤3开始。在步骤11中,保当运行SendMessageWithPortsSMSLib的时候,在你的classpath中有最q生成的JARQ对于RxTx的改变)Q同时保证用RXTXcomm.jar和rxtxSerial.dll文g代替Java通信API的comm.jar和相应的dll文g?br />
注意的要点:因ؓSMSLib使用Java通信APIQ或者RxTxQ这些会Ҏ作系l进行本地调用,我徏议不要将q些代码直接嵌入到应用程序服务器或Web服务器。一个可选的解决Ҏ是将q些代码嵌入C个单独的RMIQ远E方法调用)服务器或Web service服务器,然后从应用服务器来访问他。但是,因ؓ我们使用GSM调制解调器,SMS的发送速度很低Q所以如果我们直接调用接口(RMI或Web serviceQ,最好用异步设计。例如,当你试着发送一条消息到讑֤Q将必须的信息(UdLQ端口,消息{)攑ֈ一个Java消息服务队列中。写一个消息驱动的bean来采集消息,然后使用一个Web service来调用服务(嵌入在SMS发送代码中Q?br />
我谈C一U可行的方式Q你可以选择M最适合你的架构的设计。但是当做Q何决定的时候,紧记如下两点Q?br />
使用GSM调制解调器,发送SMS消息的速度不是很快Q依赖与你选择的GSM调制解调器和SMS服务提供商)
SMSLib使用Java通信API或RxTxQ这对操作pȝ发生本地调用
虽然我徏议用两个Nokia 6600Ud讄Q一个作为GSM调制解调器,另一个作为Java ME客户端)Q你可以仅仅使用一个来试此行为。首先,把MIDlet安装在设备上。然后用相同的讑֤作ؓGSM调制解调器。当发送SMS消息Ӟ把消息发送到与你作ؓ发送消息的GSM调制解调器的Ud讑֤相同的移动号码上。在q中情况下,发送者和接收者移动电话是相同的?br />
?l?/span>
在这文章中Q你学到了如何用push注册特征来写Java ME应用E序。同Ӟ你也学到了如何从服务器发送一条SMS消息Q然后自动启动MIDlet。ؓ了仅仅测试push注册特征Q你可以使用两部支持MIDP 2.0和WMA1.1的手机(不需要服务器端SMS pushQ,和Sun Java Wireless Toolkit提供的SMSSend和SMSRecieveCZE序。但是在实际应用E序中,你可能需要从服务器发送SMS消息Q而不是从另一个MIDlet?br />
在本文中展示的代码片断不是很复杂Q搭建环境的步骤却很复杂。但是一旦正地搭徏了环境,你会很兴奋的看到使用服务器端SMS pushQpush注册特征在真实的讑֤上运行。如果你在用SMSLib旉CQ何问题,你L可以发布问题和向SMSLib用户l请求帮助。最后,我要感谢SMSLib目的所有者Thanasis Delenikas分n了一些关于SMSLib最q开发中的有价值的信息?br />
????/b>
Srijeeb Roy拥有印度加尔各答Jadavpur大学计算机科学和工程学的学士学位。他目前作ؓ技术架构师Q在Tata Consultancy Services Limited公司的一个基于Java EE的项目中工作。他在Java/Java EE的领域中工作?q以上,在IT工业拥有d多余7q的l验。他Z的公司和客户开发了多个Java的内部框架。他也工作在多个其他的领域,比如ForteQCORBA和Java ME?br />
资 源
下蝲文章中的源代码:
http://www.javaworld.com/javaworld/jw-04-2006/push/jw-0417-push.zip
下蝲Sun Java Wireless ToolkitQ?br />http://java.sun.com/products/sjwtoolkit/
下蝲SMSLibQ?br />http://smslib.org/
RxTx主页Q?br />http://rxtx.org/
]]>