Java smack/Android asmack RosterListener

标签 java android listener smack

我一直在寻找。但找不到任何东西。我需要刷新与名册监听器的联系人状态。 (离线/在线)。创建名册时我会这样做:

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/

相关文章:

java - 当通过 testng 框架执行时,我的 selenium 测试未从 cmd 或 Jenkins 运行。结果 : Total tests run: 0, 失败 : 0, 跳过:0

java - 检查数组中是否存在某个值

Oracle 客户端 ORA-12541 : TNS:no listener

java - 回调监听器无法正常工作

javascript - 通过更多项目获取元素

java - fileInputStream 和 Scanner 类之间差异背后的逻辑

java - 读取 netflow/rflow (dd-wrt) 数据包内容

java - Android:添加 SEND_SMS 权限导致 gradle build 失败

Android:setListAdapter 仅设置数据库中的最后一行

Android - 具有 boolean 错误的 ContentValue 数据库?