2016-08-17 1 views
1

J'utilise le code de la documentation officielle de l'API smack pour envoyer un message à un ID Jabber spécifique.
CLick HereComment envoyer un à un message en utilisant smack API 4.1.0 android

Je peux recevoir des messages d'une pièce en utilisant le code ci-dessous.

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

Ma question est que comment puis-je envoyer un message à un JID spécifique parce que je ne suis pas en mesure de le travailler même après beaucoup de googler ce que je suis absent. La connexion est bien l'utilisateur authentifie également mais le code ci-dessous fonctionne maintenant pour envoyer le message.

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

Toute aide sera appréciée Merci.

+0

ne recevant pas, vous avez utilisé la conférence et demander un chat one-to-one? – Saveen

+0

ok c'est mon erreur je supprime la conférence –

Répondre

2

est ici par exemple d'envoyer un code de message de mon dernier projet:

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

MISE À JOUR:

Comment recevoir un message:

Lorsque vous êtes authentifié:

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

(YourConnectionClass devrait mettre en œuvre ChatManagerListener et ChatMessageListener)

vous devez également mettre en œuvre les méthodes suivantes:

@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

Ok laissez-moi vérifier s'il vous plaît –

+0

Merci, mais pouvez-vous s'il vous plaît aussi me dire comment je suis censé recevoir maintenant quand j'ajoute écouteur dans l'instance de chat, il donne –

1

S'il vous plaît suivre quelques étapes pour une à une seule communication dans XMPP: En StanzaListener vous avez tout message avec l'ajout connexion entre deux personnes, mais si vous voulez spécifique obtenir deux personnes chat puis utilisez ChatMessageListener.

Étape 1. Declare en tant que variables globales

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

Étape 2. Utilisez ce code dans oncreate ou fragment

Remarque: Assurez-vous que vous avez connecté avec le serveur de chat.

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

Etape 3. Méthodes pour le chat de une à une 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) { 

     } 
    } 
} 

Étape 4. détruire

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

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

Espérons que cela vous aidera et si vous voulez plus d'informations jeter un oeil from here. Thankyou

+0

Merci beaucoup :) –