2014-02-21 41 views
-1

如在asmack documentation中看到的那樣,當您從Chat的MessageListener中的processMessage()方法中收到一個Chat類型消息時,我應該使用Chat.sendMessage()來發回此消息以通知消息接收。使用Asmack在XMPP中回覆消息

但是在我的聊天實現中,當打開一對一聊天時我不使用ChatManager,我有一個Service和Listener來完成這些事情。

服務中我有一個PacketListener可以接收,並且我正在嘗試正確地發送回消息,正​​如我在asmack documentation中看到的,但它不起作用。

this.xmppChat.addPacketListener(new PacketListener() { 

      @Override 
      public synchronized void processPacket(Packet packet) { 

       Message message = (Message) packet; 

       if (message.getType() == Message.Type.chat) { 

        Log.i("XMPP_SERVICE", 
          String.format("Mensaje recibido de %s", 
            message.getFrom())); 

        // Rest of code implementation... 

        // At the end try to send back message to notify reception. 
        XMPPService.this.xmppChat.sendMessage(new Message(message.getBody())); 
       } 
      } 
     }, new PacketTypeFilter(Message.class)); 

的XMPPService.this.xmppChat.sendMessage(消息消息)方法:

public boolean sendMessage(Message message) { 

    Log.i("XMPP_INFO", "Enviando el mensaje"); 

    try { 

     this.xmppManager.getConnection().sendPacket(message); 

     Log.i("XMPP_INFO", "Enviado el mensaje"); 
     return true; 
    } catch (Exception ex) { 

     Log.e("XMPP_ERROR", ex.getMessage()); 
     return false; 
    } 
} 

我做錯了什麼?我怎樣才能解決?

此致敬禮,並提前致謝。

+0

什麼不起作用?一些細節會有幫助。 – Flow

回答

2

這是我的代碼,希望對您有所幫助,看看吧:

ChatManager cm = XmppTool.getConnection().getChatManager(); 


final Chat newchat = cm.createChat(userChat, new MessageListener() { 

      @Override 
      public void processMessage(Chat chat, Message message) { 
       // TODO Auto-generated method stub 
       Log.i(TAG, 
         "from:" + message.getFrom() + " body:" 
           + message.getBody()); 
       String[] args = new String[] { "hoafer", message.getBody(), 
         TimeRender.getDate(), "IN" }; 
      } 
     }); 

如果你想傾聽所有的信息,您可以使用該代碼:

cm.addChatListener(new ChatManagerListener() { 
     @Override 
     public void chatCreated(Chat chat, boolean able) { 
      chat.addMessageListener(new MessageListener() { 
       @Override 
       public void processMessage(Chat chat, Message message) { 
        Log.i(TAG, "receiver message~!"); 
        String tmp = message.getFrom(); 
        String body=message.getBody(); 
        String[] from = tmp.split("@"); 
        Log.i(TAG, "from:" + message.getFrom() + " body:" 
          + body); 
        } 

      }); 
     } 
    }); 

建議您使用該庫的最新版本,舊版本似乎有問題。我遇到過類似的問題,所以使用新版本的庫解決了它

+0

你可以請給我們新的鏈接:) –

+0

@hoafer我面臨一個問題,在使用asmack從xmpp服務器發送和接收Android設備上的消息,你能過來這個[鏈接](http://chat.stackoverflow。 com/rooms/68853 /試圖學習)來幫助我,謝謝 –

0

試試這個代碼,可以幫助你:

PacketFilter packetFilter = new MessageTypeFilter(
         Message.Type.chat); 

       connection.addPacketListener(new PacketListener() { 
        @Override 
        public void processPacket(Packet packet) 
          throws NotConnectedException { 
         Message message = (Message) packet; 

         if (message.getBody() != null) { 
          String fromName = StringUtils 
            .parseBareAddress(message.getFrom()); 
          Log.e("XMPPChatDemoActivity", "Text Recieved " 
            + message.getBody() + " from " 
            + fromName); 

          Packet received = new Message(); 
          received.addExtension(new DeliveryReceipt(
            packet.getPacketID())); 
          received.setTo(packet.getFrom()); 
          connection.sendPacket(received); 


         } 

        } 
       }, packetFilter);