2017-09-22 4 views
0

Android에서 채팅 응용 프로그램을 만들고 있습니다. 메시지를 보내고 받지만 대화의 다른 사용자 상태와 타이핑 상태를 어떻게 알 수 있습니까?안드로이드에서 Smack 4.2의 1 : 1 대화에서 타이핑 상태를 아는 방법?

ChatManagerLister를 사용하기 위해 읽었지만이 버전에서는 더 이상 사용되지 않습니다.

Smack 4.2에서 ChatManager 클래스에는 채팅 상태를 수신하는 메소드가 없습니다.

+0

https://stackoverflow.com/questions/33479355/how-to-send-composing-is-를 구현해야 입력 - 채팅 - 상태 - 다중 사용자 채팅 그룹/45814536 # 45814536 –

+0

답변을 주셔서 감사합니다 @ Sarthak Mittal,하지만 가능한 해결책을 볼 수 없습니다. 'MessageEventManager' 클래스는 Smack의 레거시 모드입니다. – jamarfal

+0

2 ~ 3 일 안에 언급 된 링크에서 올바르게 답변을 업데이트 할 예정입니다. :) –

답변

0

입력 상태에 chatstates ejabberd 프로토콜이 사용되었습니다. 이 문서가 도움이 될 수 있습니다 읽어 보시기 바랍니다 당신의 안드로이드 측 XEP-0085: Chat State Notifications

당신은 다음 코드

Message msg= (Message) stanza; 

    // below ChatStateExtension for Compossing message. 
      ChatStateExtension state = (ChatStateExtension)msg.getExtension("http://jabber.org/protocol/chatstates");//jabber:x:event 
      // if state (ChatStateExtension) !=null and is composing then call listener method if not error. 
      if(state!=null) { 
       Log.d(AppConstants.ELEMENT,"ChatStateExtension : " + state.toXML()); 
       if (state.getElementName().equals("composing")) { 
        if (msg.getType().equals(Message.Type.error)) { 
         return; 
        } 

        if (iCallBackForTypingListener != null) { 
         DelayInformation timestamp = (DelayInformation) msg.getExtension("delay", "urn:xmpp:delay"); 
         if (timestamp == null) 
          timestamp = (DelayInformation) msg.getExtension("x", "jabber:x:delay"); 

         if (timestamp != null && timestamp.getReason().equalsIgnoreCase("Offline Storage")){ //return if delay info is Offline Storage 
          return; 
         } 


     //update your typing listener 
    iCallBackForTypingListener.onTypingStanza(fromJID, typingSender); 
        } 
// xmpp.updateChatState(fromJID, state.getElementName(), sender); 
        return; 
       } else if (state.getElementName().equals("paused")) { 
        return; 
       }