我正在使用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>
任何帮助将不胜感激。
答案 0 :(得分:3)
在XMPPConnection上调用addPacketInterceptor:
connection.addPacketInterceptor(new PacketInterceptor() {
public void interceptPacket(Packet packet) {
// modify packet
}
}, new PacketTypeFilter(Presence.class));
addPacketInterceptor的docs说:
使用此连接注册数据包拦截器。每次要通过此连接发送数据包时,都会调用拦截器。拦截器可以修改要发送的数据包。数据包过滤器确定将哪些数据包传递给拦截器。