2016-08-17 51 views
1

我使用smack API的官方文档中的代码将消息发送到特定的Jabber ID。
CLick Here如何使用smack API发送一对一消息4.1.0 android

我能够使用下面的代码从房间接收消息。

public void joinChatRoom(){ 
     MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(connection); 
     multiUserChat = manager.getMultiUserChat("[email protected]"); 
     try { 
      multiUserChat.join("user"); 
     } catch (SmackException.NoResponseException e) { 
      e.printStackTrace(); 
     } catch (XMPPException.XMPPErrorException e) { 
      e.printStackTrace(); 
     } catch (SmackException.NotConnectedException e) { 
      e.printStackTrace(); 
     } 
     ChatManager.getInstanceFor(connection).addChatListener(new ChatManagerListener() { 
      @Override 
      public void chatCreated(Chat chat, boolean createdLocally) { 
    chat.addMessageListener(new ChatMessageListener() { 
     @Override 
     public void processMessage(Chat chat, Message message) { 
      System.out.println(message.getBody()); 
     } 
    }); 
      } 
     }); 
     System.out.println("Test"); 
    } 

问题是,我如何才能将消息发送到特定的JID,因为我不能够甚至很多谷歌上搜索我缺少什么后做出来。连接是好的用户也认证,但下面的代码现在正在发送消息。

public void sendMsg() { 
     if (connection.isConnected()) { 
      // Assume we've created an XMPPConnection name "connection"._ 
      chatmanager = ChatManager.getInstanceFor(connection); 
      newChat = chatmanager.createChat("[email protected]", new ChatMessageListener() { 
       @Override 
       public void processMessage(Chat chat, Message message) { 
        System.out.println("Received Message:"+message); 
       } 
      }); 

      try { 
       System.out.println("check the message...."); 
       newChat.sendMessage("Howdy!alksd;lsakdsa;lkdsa;lksa;lsa"); 
      } catch (SmackException.NotConnectedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

任何帮助将不胜感激。

+0

没有得到,您使用会议并要求一对一聊天? – Saveen

+0

好吧,我的错误,我正在消除会议 –

回答

2

这里是例如从我的最后一个项目发送消息代码:

private void sendMessage(String body, String toJid) { 
    try { 
     Jid jid = JidCreate.from(toJid + "@" + MyApplication.CHAT_DOMAIN); 
     Chat chat = ChatManager.getInstanceFor(mConnection) 
       .createChat(jid.asJidWithLocalpartIfPossible()); 
     chat.sendMessage(body); 
    } catch (Exception e) { 
    } 
} 

UPDATE:

如何收到一条消息:

当你进行身份验证:

ChatManager.getInstanceFor(mConnection).addChatListener(YourConnectionClass.this); 

(YourConnectionClass应该实现ChatManagerListener和ChatMessageListener)

还需要实现以下方法:

@Override 
public void chatCreated(Chat chat, boolean b) { 
    chat.addMessageListener(ChatConnection.this); 
} 

@Override 
public void processMessage(Chat chat, Message message) { 
    if (message.getType().equals(Message.Type.chat) || message.getType().equals(Message.Type.normal)) { 
     if (message.getBody() != null) { 
      Jid jid = message.getFrom(); 
      Localpart localpart = jid.getLocalpartOrNull(); 
      ... 
     } 
    } 
} 
+0

好吧,让我检查请 –

+0

谢谢,但你也可以请告诉我我应该如何接收现在实际上当我添加在聊天实例监听器,它给出例外 –

1

请遵循一个几步到一个通信的XMPP: 在StanzaListener你已经得到了所有消息添加两个人之间的连接,但如果你想特定的获得两人聊天,然后使用ChatMessageListener

步骤1.声明为全局变量

ChatManagerListener chatListener; 
ChatMessageListener messageListener; 
Chat chat; 
private Jid opt_jid; 
StanzaListener packetListener; 

步骤2.使用的OnCreate或片段

注意此代码:请确保您有聊天服务器连接。

try { 
     String opt_jidStr = "user_" + userid; 
     try { 
      opt_jid = JidCreate.bareFrom(Localpart.from(opt_jidStr), Domainpart.from(Common.HOST)); 
      PurplkiteLogs.logError(TAG,"opt jid :" + opt_jid); 
     } catch (XmppStringprepException e) { 
      e.printStackTrace(); 
     } 
     messageListener = new ChatMessageListener() { 
      @Override 
      public void processMessage(Chat chat, Message message) { 
       AppLogs.logInfo(TAG, "chat get me something " + message.getBody()); 
      } 
     }; 

     packetListener = new StanzaListener() { 
      @Override 
      public void processPacket(Stanza packet) throws SmackException.NotConnectedException, InterruptedException { 

       if (packet instanceof Message) { 
        final Message message = (Message) packet; 

        } 
      } 
     }; 

     chatListener = new ChatManagerListener() { 

      @Override 
      public void chatCreated(Chat chatCreated, boolean local) { 
       onChatCreated(chatCreated); 
      } 
     }; 

     XMPP.getInstance().getConnection(acitiviy)).addAsyncStanzaListener(stanzaListener, null); 
     ChatManager.getInstanceFor(XMPP.getInstance().getConnection(acitiviy))) 
      .addChatListener(chatManagerListener); 
     ServiceDiscoveryManager sdm = ServiceDiscoveryManager 
      .getInstanceFor(XMPP.getInstance().getConnection(acitiviy))); 
     sdm.addFeature("jabber.org/protocol/si"); 
     sdm.addFeature("http://jabber.org/protocol/si"); 
     sdm.addFeature("http://jabber.org/protocol/disco#info"); 
     sdm.addFeature("jabber:iq:privacy"); 


     try { 
      String addr1 = XMPP.getInstance().getUserLocalPart(getActivity()); 
      String addr2 = opt_jid.toString(); 

      if (addr1.compareTo(addr2) > 0) { 
       String addr3 = addr2; 
       addr2 = addr1; 
       addr1 = addr3; 
      } 
      chat = ChatManager.getInstanceFor(
      XMPP.getInstance().getConnection(acitiviy))) 
      .getThreadChat(party1 + "-" + party2); 
      AppLogs.logInfo(TAG, "chat value single chat :" + chat + " , " + addr2 + " , " + addr1); 
      // for subscribed the user 
      Presence subscribe = new Presence(Presence.Type.subscribe); 
      subscribe.setTo(opt_jidStr); 
      XMPP.getInstance().getConnection(acitiviy)).sendStanza(packet); 
      // for subscribed the user 

      if (chat == null) { 
      chat = ChatManager.getInstanceFor(
      XMPP.getInstance().getConnection(acitiviy)) 
      .createChat(jid, party1 + "-" + party2, 
        messageListener); 
       AppLogs.logInfo(TAG, "chat value single chat 1 :" + chat); 
      } else { 
       chat.addMessageListener(messageListener); 
       AppLogs.logInfo(TAG, "chat value single chat 2:" + chat); 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 


    } catch(Exception e) { 
     e.printStackTrace(); 
    } 

步骤3.方法一对一聊天purposer

void onChatCreated(Chat chatCreated) { 
    if (chat != null) { 
     if (chat.getParticipant().getLocalpart().toString().equals(
       chatCreated.getParticipant().getLocalpart().toString())) { 
      chat.removeMessageListener(messageListener); 
      chat = chatCreated; 
      chat.addMessageListener(messageListener); 
     } 
    } else { 
     chat = chatCreated; 
     chat.addMessageListener(messageListener); 
    } 
} 


void sendMessage(String message) { 
    if (chat != null) { 
     try { 
      chat.sendMessage(message); 

     } catch (SmackException.NotConnectedException e) { 
     } catch (Exception e) { 

     } 
    } 
} 

步骤4.在破坏

XMPP.getInstance().removeChatListener(getActivity(), chatListener); 
     if (chat != null && messageListener != null) { 

      XMPP.getInstance().getConnection(acitiviy)).removeAsyncStanzaListener(stanzaListener); 
      chat.removeMessageListener(messageListener); 
     } 

希望这会帮助你,如果你想了解更多信息,看看from here。 Thankyou

+0

非常感谢:) –