簡訊貓二次開發(java版)

huweijian5發表於2018-09-14

簡訊貓二次開發(java版)

示例程式碼github

簡訊貓


  • 簡訊貓用於批量收/發簡訊或其它SIM卡服務。
  • 簡訊貓與PC通過GSM無線網路互動。
  • 互動過程可以分為三個層次:
    1.物理層,即無線網路通訊。
    2.指令層,簡訊貓支援M35AT指令。
    3.應用層,APP需要與簡訊貓互動的內容。

在做二次開發過程中,真正需要關心的只是應用層的內容。為了避免重複開始,關於物理層和指令層,可以直接使用現有的開源專案。而二次開發的程式碼只需要呼叫指令層的API即可。

環境

  • windows10 64bit
  • jdk1.8
  • *

準備

物理層開源專案Rxtx

  • 官網讓我們去這裡下載64位的:http://fizzed.com/oss/rxtx-for-java

  • 這裡寫圖片描述

  • 在這裡選擇相應的版本下載即可

  • 這裡寫圖片描述

  • 這裡寫圖片描述
  • 將下載下來的rxtxSerial.dll複製到JAVA_HOME\bin目錄下
  • 將下載下來的RXTXcomm.jar匯入專案

指令層開源專案Smslib

  • 這裡寫圖片描述

  • 將下載下來的smslib-3.5.0.jar匯入專案即可

  • 同時由於專案依賴了log4j,需要下載或加入依賴,以下提供gradle的依賴(自己去網上找jar包然後匯入專案也是可以的)
 compile('log4j:log4j:1.2.17')
  • 以下是從網路找的一段測試程式碼,親測通過,實際肯定還要進行封裝下,見 示例程式碼github
public class T {
    public static boolean sendSMS(String phone, String content) throws Exception {
        //獲取簡訊配置的資訊
        // ---------------建立串列埠裝置,如果有多個,就建立多個--------------  
        // 1、連線閘道器的id(隨意指定,不衝突即可) 
        // 2、com口名稱,如COM1或/dev/ttyS1(根據實際情況修改)  
        // 3、串列埠波特率,如9600(根據實際情況修改,一般為115200)  
        // 4、開發商,一般為huawei和wavecom,可通過工具檢測出來
        // 5、型號,可選,不清楚直接為空就好了 
        SerialModemGateway gateway = new SerialModemGateway("modem.com1", "COM1", 115200, "wavecom", "");

        gateway.setInbound(true); // 設定true,表示該閘道器可以接收簡訊
        gateway.setOutbound(true); // 設定true,表示該閘道器可以傳送簡訊
        // -----------------建立傳送簡訊的服務(它是單例的)----------------
        Service service = Service.getInstance();
        Service.getInstance().S.SERIAL_POLLING = true;
        try {
        // ---------------------- 將裝置加到服務中----------------------
            service.addGateway(gateway);
        // ------------------------- 啟動服務 -------------------------
            service.startService();
        // ------------------------- 傳送簡訊 -------------------------  
            OutboundMessage msg = new OutboundMessage(phone, content);
            msg.setEncoding(Message.MessageEncodings.ENCUCS2);
            service.sendMessage(msg);
        // ------------------------- 關閉服務 -------------------------  
            service.stopService();
            service.removeGateway(gateway);
        } catch (Exception e) {
            e.printStackTrace();
            service.stopService();
            service.removeGateway(gateway);
            return false;
        }
        return true;
    }


    public static void main(String[] args) {
        try {
            sendSMS("15622770000", "dgshdgl第幾個\nddd");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

資源

參考

相關文章