程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> Wireless Messaging API

Wireless Messaging API

編輯:JAVA編程入門知識

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()方法,該方法返回在當前設備的指定端口收到的下一個短信息。假如沒有短信息到達,那麼該方法將會阻塞,並等待下一個短信息的到達,或者由另一個不同的線程關閉此連接。請看下面的示例代碼:


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved