Java smack / Android asmack RosterListener - PullRequest
2 голосов
/ 17 мая 2011

Я много искал.но ничего не смог найти.Мне нужно обновить состояние контактов с помощью rosterlistener.(Оффлайн / онлайн).Когда я создаю список, я делаю:

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

userstatus - векторная строка, затем я делаю из нее массив строк.В моей основной программе я просто проверяю этот массив перемешиваний на офлайн или онлайн.Но что делать, если пользователь переходит в автономный режим / онлайн.Где именно я должен поставить слушателя и как именно его использовать?

1 Ответ

6 голосов
/ 17 мая 2011

Вы реализуете 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);

, который вернет присутствиезначение для пользователя с наивысшим приоритетом и доступностью.

...