JSR 205 定義的無線消息 API (WMA 2.0) 提供統一介面發送/接收 SMS、MMS、Cell Broadcast,基於 Generic Connection Framework (GCF)。本文介紹核心 API、編程模式、三類消息傳遞場景及企業級應用機會。
| 介面/類 | 說明 |
MessageConnection | GCF 連接介面,Connector.open() 獲取 |
TextMessage | 文本消息,setPayloadText()/getPayloadText() |
BinaryMessage | 二進制消息,setPayloadData(byte[]) |
MultipartMessage | MMS 多部分消息,可添加文本/圖片/音頻 |
MessageListener | 異步接收回調介面,notifyIncomingMessage() |
發送文本消息 (SMS)
try {
String addr = "sms://+8613800001234";
MessageConnection conn = (MessageConnection) Connector.open(addr);
TextMessage msg = (TextMessage) conn.newMessage(MessageConnection.TEXT_MESSAGE);
msg.setPayloadText("測試短信內容");
conn.send(msg);
conn.close();
} catch (IOException e) { e.printStackTrace(); }
接收文本消息
public class SmsReceiver implements MessageListener {
private MessageConnection conn;
public void startListening(int port) throws IOException {
conn = (MessageConnection) Connector.open("sms://:" + port);
conn.setMessageListener(this);
}
public void notifyIncomingMessage(MessageConnection c) {
try {
Message msg = c.receive();
if (msg instanceof TextMessage) {
String text = ((TextMessage) msg).getPayloadText();
processIncomingSms(text);
// 可選:自動回覆
TextMessage reply = (TextMessage) c.newMessage(MessageConnection.TEXT_MESSAGE);
reply.setPayloadText("收到: " + text);
reply.setAddress(msg.getAddress());
c.send(reply);
}
} catch (IOException e) { e.printStackTrace(); }
}
}
關鍵:必須在獨立線程中處理耗時邏輯,避免阻塞 WMA 回調線程。
發送二進制消息
byte[] data = "Hello".getBytes("UTF-8");
MessageConnection conn = (MessageConnection) Connector.open("sms://+8613800001234");
BinaryMessage msg = (BinaryMessage) conn.newMessage(MessageConnection.BINARY_MESSAGE);
msg.setPayloadData(data);
conn.send(msg);
三類消息傳遞模式
- Server → Phone:CRM 發送訂單狀態、驗證碼、推廣信息;客戶端解析呈現圖表/列表。
- Phone → Server:設備上報 GPS、傳感器數據、日誌;無 IP 連接時的備用通道。
- Phone ↔ Phone:遊戲道具交換、P2P 文件傳輸、即時對戰指令同步。
MMS 多媒體消息
MultipartMessage mms = (MultipartMessage) conn.newMessage(MessageConnection.MULTIPART_MESSAGE);
mms.addMessagePart(new MessagePart("text/plain", "天氣預報".getBytes()));
mms.addMessagePart(new MessagePart("image/jpeg", loadImageBytes()));
mms.setSubject("今日天氣");
conn.send(mms);
Cell Broadcast (小區廣播)
- 僅接收,不可發送。
- 連接 URL:
cbs://:channel_id(如 50 為緊急警報)。
- 適合災害預警、交通資訊等廣播服務。
企業級應用機會
- 銀行/支付:交易確認碼、帳單通知、風險預警(SMS 到達率近 100%)。
- 物流/車隊:GPS 位置上報、調度指令下發(弱網環境下 SMS 更可靠)。
- 醫療:醫囑提醒、體檢報告 MMS 圖文並茂。
- 遊戲/社交:好友邀請、禮物贈送、狀態同步(二進制載荷極省流量)。
最佳實踐提醒
- 捕獲
SecurityException(用戶拒絕權限提示)。
- 發送前檢查
MessageConnection.MAX_MESSAGE_SIZE 避免超長失敗。
- 接收端實現
MessageListener 而非輪詢 receive(),節省電量。
- 生產環境建議封裝重試、隊列、去重、加密等中間層。
總結
WMA 以簡潔 API 隱藏協議細節,讓 Java ME 應用輕鬆接入 SMS/MMS/CBS 能力。結合企業後台,可構建高可靠、廣覆蓋的移動通知與互動系統。
- 上一篇文章: Java ME 平台實現 Cookie 管理機制
- 下一篇文章: Sony Ericsson JP-7 平台 Video Canvas 繪圖覆蓋技術
Copyright ©
程式碼之家 All Rights Reserved