Вы реализуете 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);
, который вернет присутствиезначение для пользователя с наивысшим приоритетом и доступностью.