2011-05-17 27 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是一个矢量列,然后让我从一个字符串数组。在我的主程序中,我只是检查这个stirng阵列的离线或在线。但是如果用户离线/在线怎么办。究竟我必须把听众放到哪里,以及如何使用它?

回答

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); 

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