2011-06-13 4 views
1

Java 용 Smack API를 사용하여 ejabberd 및 gtalk 서버에 연결합니다. 연결할 수 있고 잘 로그인 할 수 있지만 1 개의 사소한 수정을 원합니다.XMPP 클라이언트에서 나가는 현재 상태 스탠자 변경

로그인 한 사용자의 현재 스탠자를 변경하려면 어떻게해야합니까? 스 D 주어진 예를 들어

:

<presence to="[email protected]/androidd5a3arer3" 
     from="[email protected]/Smack"> 
    <status></status> 
    <priority>24</priority> 
    <show>away</show> 
    <c xmlns="http://jabber.org/protocol/caps"></c> 
    <x xmlns="vcard-temp:x:update"> 
    <photo>asefe3a33e</photo> 
    </x> 
</presence> 

나는 다른 사람에게 패킷을 전송하기 전에 다음과 같이 새 필드를 추가하고 싶습니다 : 어떤 도움을 주시면 감사하겠습니다

<presence to="[email protected]/androidd5a3arer3" 
     from="[email protected]/Smack"> 
    <status></status> 
    <priority>24</priority> 
    <show>away</show> 
    <c xmlns="http://jabber.org/protocol/caps"></c> 
    <x xmlns="vcard-temp:x:update"> 
    <photo>asefe3a33e</photo> 
    </x> 
<NEW_FIELD> NEW STUFF HERE </NEW_FIELD> 
</presence> 

. 당신의 XMPPConnection에

답변

3

통화 addPacketInterceptor는 :

connection.addPacketInterceptor(new PacketInterceptor() { 
     public void interceptPacket(Packet packet) { 
      // modify packet 
     } 
    }, new PacketTypeFilter(Presence.class)); 

addPacketInterceptor의 docs 말 :

이 연결 패킷 인터셉터를 등록합니다. 인터셉터는이 연결에 의해 패킷이 전송 될 때마다 호출됩니다. 인터셉터는 보낼 패킷을 수정할 수 있습니다. 패킷 필터는 어떤 패킷이 인터셉터로 전달 될지를 결정합니다.

+0

고맙습니다. 이것은 내가 필요한 것입니다! – BinRoot