在XMPP客户端中更改Outcoming Presence Stanza

时间:2011-06-13 20:35:23

标签: java xmpp smack

我正在使用Smack API for Java连接到ejabberd和gtalk服务器。我可以连接并登录正常,但我想做一个小修改。

如何更改已登录用户的在线状态?

例如,给定节:

<presence to="someone@someServer.com/androidd5a3arer3"
      from="me@someServer.com/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="someone@someServer.com/androidd5a3arer3"
      from="me@someServer.com/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>

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

在XMPPConnection上调用addPacketInterceptor:

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

addPacketInterceptor的docs说:

  

使用此连接注册数据包拦截器。每次要通过此连接发送数据包时,都会调用拦截器。拦截器可以修改要发送的数据包。数据包过滤器确定将哪些数据包传递给拦截器。

相关问题