Android与Smack - 如何获取在线用户列表?

时间:2016-12-12 10:15:47

标签: android xmpp chat smack

我正在使用 jivesoftware Smack SDk 进行实时聊天功能。 为了创建连接,我使用以下代码,

template<class T> class PixelArray {
public:
    int width_, height_;
    int size_;
    T* data_;

    PixelArray() {
        data_ = NULL;
    };

    ~PixelArray() {
        if (data_ != NULL)
            delete[] data_;
        data_ = NULL;
    };

    PixelArray(const PixelArray& other)
    {
        if (data_)
            delete[] data_;  // ERROR BEING THROWN HERE

        data_ = NULL:
        data_ = new T[other.size_];
        size_ = other.size_;
        width_ = other.width_;
        height_ = other.height_;
        std::copy(other.data_, other.data_ + other.size_, data_);
    }        
};

它的工作非常好。 现在问题是,我希望获得特定用户的在线状态或获取所有在线用户的列表。 我从堆栈溢出尝试了很多解决方案,但没有什么对我有用。 我试过的解决方案之一是,

XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration.builder();
    config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);

    config.setServiceName("world-pc");
    config.setHost(serverAddress);
    config.setPort(5222);
    config.setDebuggerEnabled(true);
    XMPPTCPConnection.setUseStreamManagementResumptiodDefault(true);
    XMPPTCPConnection.setUseStreamManagementDefault(true);
    connection = new XMPPTCPConnection(config.build());
    XMPPConnectionListener connectionListener = new XMPPConnectionListener();
    connection.addConnectionListener(connectionListener);
    connection.connect();
    connection.login("username","password");

这会返回一个列表,但所有用户的状态为null。 请有人帮我准确解决。

谢谢

2 个答案:

答案 0 :(得分:3)

您可以使用Presence.Type.subscribe来了解(作为用户)其他用户的状态:

Presence subscribe = new Presence(Presence.Type.subscribe);
subscribe.setTo('another_user@example.com');
connection.sendPacket(subscribe);

&#34; another_user&#34;应该以同样的方式批准你的请求:

Presence subscribe = new Presence(Presence.Type.subscribe);
subscribe.setTo('another_user@example.com');
connection.sendPacket(subscribe);

答案 1 :(得分:2)

TYPE(例如:Presence.Type.availablePresence.Type.unavailable)和来自用户的自定义可空status进行呈现(例如“Hello World!”或“Today I” “快乐”或“现在就工作”。)

要设置状态,只需在发送前设置:

Presence presence = new Presence(Presence.Type.available);
presence.setStatus("Online and ready to chat");
connection.sendStanza(presence); //or old one: connection.sendPacket(presence)