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

标签 java xmpp smack

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

如有任何帮助,我们将不胜感激。

最佳答案

在您的 XMPPConnection 上调用 addPacketInterceptor:

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

docs对于 addPacketInterceptor 说:

Registers a packet interceptor with this connection. The interceptor will be invoked every time a packet is about to be sent by this connection. Interceptors may modify the packet to be sent. A packet filter determines which packets will be delivered to the interceptor.

关于java - 在 XMPP 客户端中更改传出状态节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6335994/

相关文章:

java - 如何将参数传递给 Spark 中 mapPartitions 的用户定义函数?

java - 如何使用 Eclipse 启动文件从命令行运行 Java 程序?

java - Spring-Batch:为未知数量的分区编写分区器

XMPP 服务器的 Android asmack 聊天客户端

java - Android - XMPPError : jid-malformed - modify

java - 当值对顺序不正确时如何比较 <String, List<String>> 的 HashMap

android - 在 Android 上使用 XMPP 实现聊天应用程序的更好方法?

xmpp - 带有 http-bind 的 strophe.js 无法加载资源 404 未找到

android - 在回复超时内未收到回复。 Smack 4.2.0 muc.join()

java - 如何存储和重放 JDBC 语句?