首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

J2ME 短信發送器實現:自動化群發、間隔控制與 WMA API 實戰

     編輯:J2ME

需求背景

開發一款「短信發送機」MIDlet:用戶輸入目標號碼、指令內容、發送條數、間隔秒數,程式自動循環發送,適用於測試短信網關、驗證碼壓測等場景。

核心 API:Wireless Messaging API (WMA)

// 發送文本短信
MessageConnection conn = (MessageConnection) Connector.open("sms://" + phone);
TextMessage msg = (TextMessage) conn.newMessage(MessageConnection.TEXT_MESSAGE);
msg.setPayloadText(content);
conn.send(msg);
conn.close();

接收端可監聽固定端口:Connector.open("sms://:5000")。

關鍵類設計

SMSSenderMIDlet(入口)

  • 啟動時開啟監聽連接(可選),創建主菜單 Menu。
  • 持有靜態 Display 供全局切換畫面。
  • destroyApp 關閉連接釋放資源。

Menu(主選單)

  • 繼承 List,項目「打開發送機」。
  • 命令監聽器跳轉至 SMSForm。

SMSForm(發送配置與執行核心)

  • 字段:號碼(NUMERIC)、指令、條數、間隔秒、狀態顯示。
  • 「發送」命令啟動 Runnable 線程,移除發送命令防止重複點擊。
  • 線程循環:
    1. 檢查 sentCount < totalCount。
    2. 調用 senderImpl() 發送單條,更新狀態欄「成功發送 第 N 條」。
    3. Thread.sleep(interval * 1000) 間隔。
    4. 完成後自動返回主菜單。
  • 異常捕獲:IOException 記錄堆棧,不中斷循環(可選重試邏輯)。

完整發送線程邏輯

public void run() {
    int total = Integer.parseInt(num.getString());
    int interval = Integer.parseInt(timeOut.getString());
    while (true) {
        if (sms < total) {
            senderImpl();
        } else {
            SMSSenderMIDlet.display.setCurrent(menu);
            break;
        }
        try { Thread.sleep(interval * 1000); }
        catch (InterruptedException e) { e.printStackTrace(); }
    }
}

實測兼容性說明

安全與合規提醒

  1. 反垃圾郵件法:嚴禁用於未經授權的商業推廣、騷擾發送。
  2. 簽名發布:申請廠商簽名或 CA 簽名,獲取 javax.wireless.messaging.sms.send 權限無彈窗。
  3. 頻率限制:間隔建議 ≥ 5 秒,避免觸發運營商反濫發機制導致號碼封停。
  4. 異常重試:網絡波動時指數退避重試,記錄失敗號碼供人工複核。

擴展方向

  • 支援 PDU 模式發送長短信(>160 字符)、WAP Push、多媒體彩信 (MMS)。
  • 增加號碼導入(CSV/通訊錄)、發送記錄本地持久化(RMS)。
  • GUI 增強:進度條、預估剩餘時間、暫停/繼續按鈕。

總結

基於 WMA API 實現短信自動發送僅需核心 20 行代碼,關鍵在於「線程控制循環 + 間隔睡眠 + 狀態反饋」的工程化封裝。實際部署務必解決簽名授權與合規問題,否則僅適合內部測試環境。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
品牌/機型表現備註
Sony Ericsson無彈窗,直接發送可設置「總是允許」
Samsung無彈窗,直接發送同左
Nokia每條彈窗確認需數字簽名或用戶手動授權「總是允許」
Motorola視具體固件建議簽名發布