Wireless Messaging API (WMA) 是 J2ME 選擇性套件之一,基於 Generic Connection Framework (GCF),讓行動裝置透過無線網路(GSM/CDMA)收發簡訊(SMS)與小區廣播(CBS),支援文字與二進位資料。
javax.wireless.messaging 套件,提供全新介面取代 GCF 的 Datagram 介面(後者針對 UDP 設計)。MessageConnection、TextMessage、BinaryMessage。透過 Connector.open(url) 取得 MessageConnection,URL 格式範例:
sms://+417034967891 — 發送至指定號碼sms://+417034967891:5678 — 指定號碼與埠號sms://:5678 — 本機埠,用於接收cbs://:5678 — 監聽 CBS 廣播MessageConnection conn = (MessageConnection) Connector.open("sms://+417034967891");
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);
msg.setPayloadData(data);
conn.send(msg);
}
長度限制:單則 SMS 文字 160 字元(7-bit)或 70 字元(UCS2),二進位 140 位元組。WMA 要求支援訊息串聯,實際上限至少為三倍。
可用 numberOfSegments() 判斷需分割段數。
開啟伺服器連線(無需指定目標號碼),呼叫 receive() 封鎖等待訊息:
MessageConnection serverConn = (MessageConnection) Connector.open("sms://:5678");
Message msg = serverConn.receive(); // 封鎖直到收到訊息
if (msg instanceof TextMessage) {
String text = ((TextMessage) msg).getPayloadText();
// 處理文字訊息
}
另一執行緒關閉連線可中斷封鎖。
WMA 讓 J2ME 應用具備雙向簡訊能力,適用於行動銀行驗證碼、遠端指令控制、位置回報、廣播資訊接收等場景,是早期行動增值服務開發關鍵技術。