Java 在XMPP客户端中更改传出状态节

Java 在XMPP客户端中更改传出状态节,java,xmpp,smack,Java,Xmpp,Smack,我正在使用SmackAPI for Java连接到ejabberd和gtalk服务器。我可以连接和登录良好,但我想做一个小的修改 如何更改登录用户的状态节 例如,给定小节: <presence to="someone@someServer.com/androidd5a3arer3" from="me@someServer.com/Smack"> <status></status> <priority>24</priorit

我正在使用SmackAPI 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>

24
离开
asefe3a33e
在将数据包发送给其他人之前,我想添加一个新字段,如下所示:

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

24
离开
asefe3a33e
这里有新东西

任何帮助都将不胜感激

在XMPPConnection上调用addPacketInterceptor:

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

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


非常感谢。这正是我需要的!