2011-05-17 2 views
2

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

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

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

ответ

6

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

Чтобы получить текущее «лучшее присутствие» для пользователя после того, обновление присутствия, запрос реестра:

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

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