我一直在寻找。但找不到任何东西。我需要刷新与名册监听器的联系人状态。 (离线/在线)。创建名册时我会这样做:
Presence presence = roster.getPresence(r.getUser());
if(presence.isAvailable()){
userstatus.add("online");
}else{
userstatus.add("offline");
}
userstatus 是一个 vector 字符串,然后我从中创建一个字符串数组。在我的主程序中,我只是检查这个搅拌数组的离线或在线状态。但是如果用户离线/在线该怎么办。我到底必须在哪里放置监听器以及如何使用它?
最佳答案
您实现一个 RosterListener
并利用 presenceChanged()
方法。下面的示例代码与 Smack documentation 中显示的完全相同。 .
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 建议不要使用更改事件中收到的状态,而是每次检查可用的最佳状态:
To get the current "best presence" for a user after the presence update, query the roster:
String user = presence.getFrom();
Presence bestPresence = roster.getPresence(user);
That will return the presence value for the user with the highest priority and availability.
关于Java smack/Android asmack RosterListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6033806/