2016-08-17 1 views
1

smack API의 공식 문서에있는 코드를 사용하여 특정 Jabber ID로 메시지를 보내고 있습니다.
CLick Heresmack 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 당신이 추가하는 모든 메시지를 가지고 에서 StanzaListener :

@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에 하나 개의 통신에 하나 몇 단계를 따르십시오 :

은 또한 아래의 방법을 구현해야) ChatManagerListener 및 ChatMessageListener를 구현해야합니다 두 사람 사이의 연결을 원하지만 특정 사람이 두 사람을 잡으려면 ChatMessageListener을 사용하십시오. 글로벌 변수

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

단계 2. 한 OnCreate 또는 조각에서

주에서이 코드를 같은

1 단계 선언 : 당신은 채팅 서버에 연결했는지 확인하십시오.

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(); 
    } 

한 4 단계

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) { 

     } 
    } 
} 

채팅 purposer 하나에이

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

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

희망을 파괴하기위한 3 단계 방법이 도움이 될 것입니다 당신이 원하는 경우 자세한 내용은 살펴 from here. 감사합니다.

+0

고마워요 :) –

관련 문제