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包中定義了一套全新的接口,用於接收和發送短消息。
在WMA中,為了接收或者是發送短消息,你必須首先獲得一個MessageConnection接口的實例,調用javax.microedition.io.Connector的open()方法可以返回MessageConnection接口的實例,參數是字
符串型的URL,該URL和HTTP協議中的URL十分相似,它必須指定所使用的協議(SMS或者是CBS),目標電話的號碼,端口號等等,例如下面的URL都是合法的URL:
1. sms://+417034967891
2. sms://+417034967891:5678
3. sms://:5678
4. cbs://:5678
在上述URL串中,第一個和第二個URL串指定了目標設備(移動電話)的號碼,第二個URL串還指定了端口號,假如端口號沒有被指定,那麼WMA將會使用目標設備上缺省的文本信息端口(text messaging port),上述兩種情況主要用於發送短信息的情況。第三個URL串表明指定的是本機的端口,這種情況主要用於接收短信息。第四個URL串也是指定本機的端口,這種情況主要適用於監聽網絡中廣播信息。第三個URL串和第四個URL串的主要區別在於所哦使用的協議不一樣。
下面我們來看一段簡單的創建SMS客戶端的代碼:
import javax.microedition.io.*;
import javax.wireless.messaging.*;
.....
MessageConnection conn = null;
String url = "sms://+417034967891";
try
{
conn = (MessageConnection) Connector.open( url );
// do something with the connection
}
catch( Exception e )
{
// handle errors
}
finally
{
if( conn != null )
{
}}
現在SMS客戶端是創建起來了,也就是說你手上的設備已經和服務器建立了連接,那麼如何發送短信息呢?首先,你應該使用MessageConnection接口的newMessage()方法創建一個空(empty)的消息,然後再設置該消息的PayloadText(也就是需要發送的文本或者是二進制數據),最後調用MessageConnection的send()方法將短信息發送到目標設備中去。請看下面的代碼:
public void sendText( MessageConnection conn, String text)
throws IOException, InterruptedIOException {
TextMessage msg = conn.newMessage( conn.TEXT_MESSAGE );
msg.setPayloadText( text );
conn.send( msg );
}
假如是發送二進制格式的數據,那麼代碼略有不同:
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()方法,該方法返回在當前設備的指定端口收到的下一個短信息。假如沒有短信息到達,那麼該方法將會阻塞,並等待下一個短信息的到達,或者由另一個不同的線程關閉此連接。請看下面的示例代碼: