必要引用
import javax.wireless.messaging.MessageConnection;
import javax.wireless.messaging.TextMessage;
發送函數完整實作
public boolean sendSMS(String number, String message) {
String destAddr;
char[] chars = number.toCharArray();
// 小靈通號碼 (106 開頭) 不加 '+'
if (chars.length >= 3 && chars[0] == '1' && chars[1] == '0' && chars[2] == '6') {
destAddr = "sms://" + number;
} else {
// 手機號碼:確保以 '+' 開頭
if (chars[0] != '+') {
destAddr = "sms://+" + number;
} else {
destAddr = "sms://" + number;
}
}
try {
MessageConnection conn = (MessageConnection) Connector.open(destAddr);
TextMessage msg = (TextMessage) conn.newMessage(MessageConnection.TEXT_MESSAGE);
msg.setAddress(destAddr);
msg.setPayloadText(message);
conn.send(msg);
return true;
} catch (Exception e) {
// 建議記錄日誌或拋出自訂異常
return false;
}
}
關鍵細節說明
- 號碼格式:國際格式需
+ 號(如 +8869xxxxxxx);特服務碼 (106) 不加 +。
- 例外處理:捕捉
IOException、SecurityException(權限不足)等,視產品需求決定是否重試或提示用戶。
- 權限:JAD 需聲明
MIDlet-Permissions: javax.microedition.io.Connector.sms,部分手機需簽名才能發送。
擴充建議
- 支援長簡訊自動分段(超過 160 字元)。
- 加入發送狀態回報監聽 (Delivery Report)。
- 整合通訊錄選擇號碼 UI。