1

我正在使用 Smack API for Java 连接到 ejabberd 和 gtalk 服务器。我可以正常连接和登录,但我想进行 1 次小修改。

如何更改登录用户的存在节?

例如,给定节:

<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>

任何帮助,将不胜感激。

4

1 回答 1

3

在 XMPPConnection 上调用 addPacketInterceptor:

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

addPacketInterceptor的文档说:

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

于 2011-06-14T04:30:35.000 回答