2

我一直在寻找很多。但找不到任何东西。我需要用 rosterlistener 刷新联系人的状态。(离线/在线)。当我创建名册时:

Presence presence = roster.getPresence(r.getUser());
                if(presence.isAvailable()){
                    userstatus.add("online");
                }else{
                    userstatus.add("offline");
                }

userstatus 是一个向量字符串,然后我从中创建一个字符串数组。在我的主程序中,我只是在离线或在线检查这个搅拌数组。但是如果用户离线/在线该怎么办。我必须把监听器放在哪里以及如何使用它?

4

1 回答 1

6

您实现RosterListener并使用该presenceChanged()方法。这里的示例代码与Smack 文档中的完全相同。

Roster roster = con.getRoster();
roster.addRosterListener(new RosterListener() {
    // Ignored events public void entriesAdded(Collection<String> addresses) {}
    public void entriesDeleted(Collection<String> addresses) {}
    public void entriesUpdated(Collection<String> addresses) {}
    public void presenceChanged(Presence presence) {
        System.out.println("Presence changed: " + presence.getFrom() + " " + presence);
    }
});

请注意,JavaDoc 建议不要使用在更改事件中收到的出席信息,而是每次检查可用的最佳出席信息:

要在状态更新后获取用户当前的“最佳状态”,请查询名册:

String user = presence.getFrom();
Presence bestPresence = roster.getPresence(user);

这将为具有最高优先级和可用性的用户返回存在值。

于 2011-05-17T16:23:01.410 回答