手機程式開發最常見需求即 SMS、MMS、Email。Sun 透過 JSR 102 (WMA 1.1) 與 JSR 205 (WMA 2.0) 完善支援。JSR 205 完全向下相容 JSR 102,舊代碼無需修改即可運行。
Connector.open() 建立 MessageConnection。newMessage() → 設定 Payload → send()。MessageListener,於 notifyIncomingMessage() 回調中讀取。| 特性 | JSR 102 (WMA 1.1) | JSR 205 (WMA 2.0) |
|---|---|---|
| SMS 文字/二進制 | ✓ | ✓ |
| Cell Broadcast 接收 | ✓ | ✓ |
| MMS (MultipartMessage) | ✗ | ✓ |
| MessageListener 介面 | ✓ | ✓ (擴充) |
| 向下相容 | - | 完全相容 |
public final class MessagingUtil {
public static void sendTextMessage(String phone, String text) throws IOException {
checkPhone(phone);
MessageConnection conn = (MessageConnection) Connector.open("sms://" + phone);
TextMessage msg = (TextMessage) conn.newMessage(MessageConnection.TEXT_MESSAGE);
msg.setPayloadText(text);
conn.send(msg);
}
public static void sendBinaryMessage(String phone, byte[] data) throws IOException {
checkPhone(phone);
MessageConnection conn = (MessageConnection) Connector.open("sms://" + phone);
BinaryMessage bm = (BinaryMessage) conn.newMessage(MessageConnection.BINARY_MESSAGE);
bm.setAddress(phone);
bm.setPayloadData(data);
conn.send(bm);
}
private static void checkPhone(String phone) throws PhoneNumberException {
if (phone == null || phone.equals(""))
throw new PhoneNumberException("手機號碼不能為空!");
try { Integer.parseInt(phone); }
catch (NumberFormatException e) { throw new PhoneNumberException("手機號碼必須為數字!"); }
}
}
掌握 WMA 兩版本差異,封裝工具類,即可快速在 J2ME 應用中整合 SMS/MMS 功能,拓展商業與遊戲場景。