2014-02-21 38 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);