2014-09-10 38 views
0

我正在開發一個簡單的聊天應用程序。在xmpp中發送組合事件android

我可以同時與多個用戶聊天,但我的問題是, 我無法向其他用戶顯示「正在輸入...」狀態。

我提到了這個鏈接How to get typing status notification in XMPP但力幫助:(

任何幫助,將不勝感激。

 my sample code: 
      String text = textMessage.getText().toString(); 
      String to = recipient.getText().toString(); 
      Log.i("Composing=>", "Sending text " + text + " to " + to); 
      Message msg1 = new Message(to, Message.Type.chat); 

      msg1.setFrom("[email protected]"); // my id 

      MessageEventManager event=new MessageEventManager(connection); 
       //recipient id 
      event.sendComposingNotification("[email protected]",msg1.getPacketId());   

如果我在聊天瀏覽器上,它的工作很好,我能夠看到狀態「正在輸入」 當其他用戶在自己的窗口中鍵入。

+0

XEP-22消息事件是過時後只需添加ChatStateManager。請嘗試使用XEP-85聊天狀態通知。有關Smack API,請參閱https://www.igniterealtime.org/builds/smack/docs/latest/javadoc/org/jivesoftware/smackx/chatstates/ChatStateManager.html – Flow 2014-09-10 13:25:46

回答

0

您好我已經通過這個做到了這一點。

ÿ我們的代碼適用於發送打字指示。 您需要在收件人一端註冊一個指示符。

sXmppConnection.getChatManager().addChatListener(new ChatManagerListener() { 

        @Override 
        public void chatCreated(Chat arg0, boolean arg1) { 

         Log.d("chatCreated",""+arg1); 

         arg0.addMessageListener(new MessageListener() 
         { 

          @Override 
          public void processMessage(Chat arg0, Message arg1) 
       {Log.d("TYpe Stat", arg0.getParticipant()+" is typing......"); 
          } 
         }); 

        } 
       }); 
0

ChatManager intalization

chatManager = ChatManager.getInstanceFor(getXmpptcpConnection()); 
ChatStateManager.getInstance(getXmpptcpConnection()); 

,那麼你需要createChat過程中添加ChatStateListener(於chatMesageListener)

chatManager.createChat(message.getTo(), chatMessageListener).sendMessage(message); 

private ChatStateListener chatMessageListener = new ChatStateListener() { 

     @Override 
     public void stateChanged(Chat chat, ChatState state) { 
      //State Change composing,active,paused,gone,etc 
      Log.d(TAG, "ChatStateListener:::stateChanged -> " + chat.toString() + " \n -> " + state.toString()); 
     } 

     @Override 
     public void processMessage(Chat chat, Message message) { 
      //Incoming Message 
      Log.d(TAG, "ChatStateListener:::processMessage -> " + chat.toString() + " \n -> " + message.toString()); 
     } 
    };