使用WMA意味著您可以使用手機或類似設備通過各種無線網絡發送和接收短信息,無論無線網絡是基於GSM還是CDMA。值得壹提的是,WMA還支持短消息服務(SMS)和小區廣播短消息服務(CBS)。盡管WMA消息和數據報非常相似,但WMA並不使用GCF框架中定義的datagraminterfaces,因為該接口是為UDP連接設計的。WMA在javax.wireless.messaging包中定義了壹個全新的收發短信的接口。
在WMA,為了接收或發送短消息,您必須首先獲得MessageConnection接口的壹個實例。調用javax . micro edition . io . connector的open()方法返回MessageConnection接口的壹個實例,參數是壹個單詞。
字符串URL,與HTTP協議中的URL非常相似。它必須指定使用的協議(SMS或CBS)、目標電話的號碼和端口號等。例如,以下URL都是合法的URL:
1.短信://+417034967891
[]2.短信://+417034967891:5678
3.短信://:5678
4.哥倫比亞廣播公司://:5678
[]在上面的URL字符串中,第壹個和第二個URL字符串指定目標設備(移動電話)的號碼,第二個URL字符串也指定端口號。如果未指定端口號,WMA將使用目標設備上的默認短信端口。以上兩種情況主要用於發送短信。第三個URL字符串表示指定了本機的端口,主要用於接收短信。第四個URL字符串還指定了本機的端口,主要適用於收聽網絡中的廣播信息。第三個URL字符串和第四個URL字符串的主要區別在於使用的協議不同。
[]
讓我們看壹個創建SMS客戶端的簡單代碼:
[]導入javax . micro edition . io . *;
導入javax . wireless . messaging . *;
.....
[]message connection conn = null;
string URL = " SMS://+417034967891 ";
嘗試
{
conn =(message connection)connector . open(URL);
//對連接做些什麽
}
捕捉(例外e)
[]{
//處理錯誤
}
最後
{
如果(conn!=空)
{
}}
現在已經創建了短信客戶端,也就是說妳手裏的設備已經和服務器建立了連接,那麽如何發送短信呢?首先要使用MessageConnection接口的newMessage()方法創建壹個空消息,然後設置消息的PayloadText(即要發送的文本或二進制數據),最後調用MessageConnection的send()方法將短消息發送到目標設備。請看下面的代碼:
公共void sendText(消息連接連接,字符串文本)
[]
引發IOException,InterruptedIOException {
TEXT MESSAGE msg = conn . new MESSAGE(conn . TEXT _ MESSAGE);
msg.setPayloadText(文本);
conn . send(msg);
}
[]如果您以二進制格式發送數據,代碼會略有不同:
公共void sendBinary(消息連接連接,字節[]數據)
引發IOException,InterruptedIOException {
[]BINARY MESSAGE msg = conn . new MESSAGE(conn . BINARY _ MESSAGE);
當然,妳能發送的數據量是有限的。壹般來說,SMS文本消息可以包含160或70個字符。
這取決於您使用什麽字符編碼。如果是二進制數據,容量是140字節(註意:WMA要求支持消息關聯,但是,這意味著限制實際上至少高三倍。).同時可以使用MessageConnection接口的numberO fSegments()。
方法確定特定的短消息是否可以發送,以及需要分成多少個消息段。
以上介紹了如何使用WMA發送短信,使用WMA接收短信更方便。當打開壹個服務器連接時(此時不需要指定電話號碼,只需要指定協議和監聽端口號),可以直接調用MessageConnection接口的receive()方法,該方法返回當前設備指定端口接收到的下壹條短消息。如果沒有短消息到達,該方法將阻塞並等待下壹條短消息到達,否則另壹個線程將關閉連接。請看下面的示例代碼:
導入Java . io . *;
導入javax . micro edition . io . *;
導入javax . wireless . messaging . *;
[]
MessageConnection conn = null
string URL = " SMS://:5678 ";//沒有電話號碼!
嘗試{
[]conn =(message connection)connector . open(URL);
while( true ){
message msg = conn . receive();//塊
if(二進制消息的消息實例){
字節[]數據=
((BinaryMessage) msg)。getPayloadData();
//在這裏做點什麽
}否則{
[]字符串文本=
((TextMessage) msg)。getPayloadText();
[]
//在這裏做點什麽
}}
}
捕捉(異常e ){
//處理壹下
}
[]
最後{如果(conn!= null ){
請嘗試{ conn . close();} catch(異常e ){}
}
[]
}
WMA的任務只是接收和發送短信息,而不是解釋它們。壹般來說,應用程序來回發送二進制數據類型的信息,比如java.io包的數據輸入流、數據輸出流、字節數組輸入流。
和ByteArrayOutputStream類在解碼和編碼這些二進制數據時非常有用。