获取名册条目的所有资源列表

时间:2012-03-29 20:14:17

标签: xmpp smack

我希望获得名单中某个人的所有(活动)资源列表。 所以例如“user1@gmail.com”如果该用户当前通过GMail('user1@gmail.com/gmail')和Pidgin登录,我想得到类似{'gmail', 'pidgin'}的内容。

Smack可以实现吗?我知道有些客户会显示此信息,例如XMPPHP支持getResources()之类的东西,但XMPPHP适用于PHP,不适用于Google Talk,因此对我没有多大帮助。

祝你好运

1 个答案:

答案 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
            }
        }

    }
}