我希望获得名单中某个人的所有(活动)资源列表。
所以例如“user1@gmail.com”如果该用户当前通过GMail('user1@gmail.com/gmail')和Pidgin登录,我想得到类似{'gmail', 'pidgin'}
的内容。
Smack可以实现吗?我知道有些客户会显示此信息,例如XMPPHP支持getResources()
之类的东西,但XMPPHP适用于PHP,不适用于Google Talk,因此对我没有多大帮助。
祝你好运
答案 0 :(得分:3)
使用Smack,您需要在收到时跟踪Presence数据包。收到的数据包的“发件人”将包含用户JID的资源。
例如:
private XMPPConnection connection;
private PresenceListener listener = new PresenceListener();
public void setConnection(XMPPConnection connection) {
this.connection = connection;
}
public void createPresenceListener() {
connection.addPacketListener(listener, new PacketTypeFilter(Presence.class));
}
public static class PresenceListener implements PacketListener {
public void processPacket(Packet packet) {
Presence presence = (Presence) packet;
if (presence.getType() == null || presence.getType() == Presence.Type.available) {
String from = presence.getFrom();
if (from != null && from.lastIndexOf("/") > 0) {
String resource = from.substring(from.lastIndexOf("/") + 1);
// from here you can track all active resources
}
}
}
}