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

J2ME WMA 短信接收完整實現:異步監聽與多線程讀取

     編輯:J2ME

核心代碼結構

public class SmsReceiver extends MIDlet implements MessageListener {
    private MessageConnection conn;
    private boolean done = false;
    private int total = 0;

    public void startApp() {
        try {
            // 監聽端口 6222
            conn = (MessageConnection) Connector.open("sms://:6222");
            conn.setMessageListener(this); // 註冊異步回調
            new Thread(new Reader()).start(); // 啟動讀取線程
        } catch (IOException e) { /* 錯誤處理 */ }
    }

    // 異步回調:有新短信到達
    public void notifyIncomingMessage(MessageConnection c) {
        if (c == conn) total++;
    }

    // 讀取線程:阻塞式接收
    class Reader implements Runnable {
        public void run() {
            while (!done) {
                try {
                    Message msg = conn.receive(); // 阻塞直到收到短信
                    // 解析 msg (TextMessage / BinaryMessage)
                } catch (IOException e) { /* 錯誤處理 */ }
            }
        }
    }

    protected void pauseApp() {
        done = true;
        try { conn.close(); } catch (IOException e) {}
    }

    protected void destroyApp(boolean unconditional) {
        done = true;
        try {
            conn.setMessageListener(null);
            conn.close();
        } catch (IOException e) {}
    }
}

關鍵技術點解析

  1. 連接字符串:sms://:6222 表示監聽本地端口 6222,無需指定發送方號碼。
  2. 異步通知 + 專用讀取線程:
    • notifyIncomingMessage 運行於系統線程,必須極快返回,僅做計數/標記。
    • 耗時的 receive() 阻塞操作放入獨立線程,避免阻塞系統回調導致短信丟失或 ANR。
  3. 生命周期管理:
    • pauseApp:釋放連接,標記停止讀取線程。
    • destroyApp:移除監聽器,關閉連接,確保資源釋放。
  4. Message 類型判斷:接收到的 Message 實例可為 TextMessage(文本短信)或 BinaryMessage(數據短信),需 instanceof 判斷後轉型處理。

權限與部署注意事項

  • JAD/MANIFEST 需聲明權限:MIDlet-Permissions: javax.microedition.io.Connector.sms。
  • 簽名部署:非受信任域需用戶授權,建議申請可信證書簽名以獲得無縫體驗。
  • 端口衝突:同一設備同一端口同一時間只能被一個 MIDlet 監聽,設計時需考慮衝突處理。

擴展建議

  • 增加短信內容解析、過濾、存儲 (RMS) 功能。
  • 結合 PushRegistry 實現 MIDlet 自動啟動(收到短信自動喚醒)。
  • 處理多段短信(長短信)重組邏輯。

總結

WMA 短信接收的核心模式是異步通知觸發 + 專用線程阻塞讀取,配合完善的生命周期管理,可構建穩定可靠的短信業務應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved