1

D-Link USB モデムを使用してコンピュータで SMS を受信しようとしています。このリンクで問題の解決策を見つけましたが、 今直面している問題は、このように同じメッセージを 3 回受信していることです。

New Inbound message detected from Gateway: 923145663675 Hello
New Inbound message detected from Gateway: 923145663675 Hello
New Inbound message detected from Gateway: 923145663675 Hello

また、プログラムが長時間開いたままになっていると、上記の行が画面に何度も印刷されます。Google で何度も検索しましたが、未使用の通知を削除する提案が見つかった場所もあります。それを実行しましたが、まだメッセージが重複しています受け取った。コードを以下に示します

public void doIt() throws Exception{                
   InboundNotification inboundNotification = new InboundNotification();

   try{

     SerialModemGateway gateway = new SerialModemGateway("modem.com4", "COM7", 921600, "", "");

     gateway.setProtocol(Protocols.PDU); 
     gateway.setInbound(true); 
     gateway.setSimPin("0000"); 
     Service.getInstance().setInboundMessageNotification(inboundNotification);
     Service.getInstance().addGateway(gateway);
     Service.getInstance().startService();

     System.out.println("Now Sleeping - Hit <enter> to stop service.");
     System.in.read();
     System.in.read();
  }catch (Exception e){
      e.printStackTrace();
  }finally{
      Service.getInstance().stopService();
  }
}

public class InboundNotification implements IInboundMessageNotification{
      public void process(AGateway gateway, MessageTypes msgType, InboundMessage msg){

        if (msgType == MessageTypes.INBOUND) {                     
              System.out.println("New Inbound message detected from Gateway: " + msg.getOriginator() + " " + msg.getText());

                try {
                    gateway.deleteMessage(msg);
                } catch (GatewayException ex) {
                    Logger.getLogger(ReadMessages.class.getName()).log(Level.SEVERE, null, ex); 
                }

        }
    }
}
4

2 に答える 2

1

私も同じ問題に直面していましたが、私の要件はすべての受信メッセージの記録を保持することでした。そのため、データベースにテーブルを作成し、送信者番号、メッセージの内容、日時などの完全な詳細を含むすべての受信メッセージをデータベースに挿入しました。データベースでは、日付、時刻、メッセージの内容を組み合わせて一意のレコードを作成しました。

今、私が重複したメッセージを受け取った場合、確かに日付、時刻、メッセージの内容は同じです. その後、これらの値がデータベースに挿入されるときに、重複する値がデータベースに挿入されることはありません。その結果、一意のデータが得られます。

ただし、実際にはメッセージを複数回受信することはなく、1 つのメッセージを受信した後、通知が複数回表示されるため、これはうまくいかない場合があります。メッセージを複数回受信する場合、日付と時刻は常に異なる必要があるためです。しかし、私の場合、これらは常に同じでした。したがって、まず受信トレイからすべてのメッセージを削除してから、受信ポートをフラッシュする必要があります。

于 2015-12-08T06:06:19.313 に答える
1

その問題も経験しました。だまされた私を殺していた。なぜあなたがこのコードを書いているのかわかりませんが、私が回避策として行ったのは、インボックスとアウトボックスの両方をデータベースに保存し (インバウンド通知が最初に到着したとき)、GSM のインボックスからメッセージを削除することだけでした。大量の通知が届かなくなりました。動作しますが、実際には問題は解決しません。ただの回避策。

ポートと関係があるような気がします。たぶん、フラッシングか何かが必要です。よくわかりませんが、私はまだそれほどプログラマーではありません。

回避策が役立つことを願っています! 乾杯!

于 2015-08-26T03:08:49.723 に答える