首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >XMPP aSmack -如何获取当前用户状态(离线/在线/离开/等等)?

XMPP aSmack -如何获取当前用户状态(离线/在线/离开/等等)?
EN

Stack Overflow用户
提问于 2013-01-22 14:51:35
回答 4查看 11.3K关注 0票数 18

我是android中的xmpp/asmack新手。

有没有人可以帮我找到用户的朋友(花名册)

我使用的是:

Presence availability = roster.getPresence(user);
Mode userMode = availability.getMode();

我还应该做些什么来获取我的花名册中列出的每个用户的可用性状态。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-22 14:55:43

只需像这样使用:

Presence availability = roster.getPresence(user);
Mode userMode = availability.getMode();

retrieveState_mode(availability.getMode(),availability.isAvailable());

public static int retrieveState_mode(Mode userMode, boolean isOnline) {
        int userState = 0;
        /** 0 for offline, 1 for online, 2 for away,3 for busy*/
        if(userMode == Mode.dnd) {
            userState = 3;
        } else if (userMode == Mode.away || userMode == Mode.xa) {   
            userState = 2;
        } else if (isOnline) {
            userState = 1;
        }
        return userState;
}

如果您有任何关于xmpp/asmack的问题,请告诉我

票数 19
EN

Stack Overflow用户

发布于 2013-01-22 15:02:18

像这样使用

userFromServer = con.getRoster().getPresence(userID);
userState = retrieveState(userFromServer.getMode(), userFromServer.isAvailable());

public int retrieveState(Mode userMode, boolean isOnline) {
    int userState = XmppFriend.OFFLINE; // default return value
    if (userMode == Mode.dnd) {
        userState = XmppFriend.BUSY;
    } else if (userMode == Mode.away || userMode == Mode.xa) {
        userState = XmppFriend.AWAY;
    } else if (isOnline) {
        userState = XmppFriend.ONLINE;
    }
    return userState;
}
票数 4
EN

Stack Overflow用户

发布于 2013-08-09 19:59:22

        roster.addRosterListener(new RosterListener() {

        public void entriesAdded(Collection<String> param) {}

        public void entriesDeleted(Collection<String> addresses) {
        }
        public void entriesUpdated(Collection<String> addresses) {  
        }
        public void presenceChanged(Presence presence) {

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

            Log.d(TAG, "BestPresence: " + user + ": " + bestPresence);

            String[] temp = presence.getFrom().split("\\@");
            Log.d(TAG, "Presence: " + temp[0] + "-" + presence.toString());

            String status = presence.toString();
            // ShowInfoDialog(temp[0]+"is "+status);

            for (int i = 0; i < friendslist.size(); i++) {

                if (temp[0].equalsIgnoreCase(friendslist.get(i).getName())) {

                    friendslist.get(i).setStatus(status);
                    Log.d(TAG, "kilepet/belepet " + friendslist.get(i).getName() + " - " + friendslist.get(i).getStatus());

                    // ShowInfoDialog(friendslist.get(i).getName()+"is "+status);
                    Log.d(TAG, "WATERFAK");

                }
            }

        }

如果你使用RosterListener,它会实时更新状态,对我来说效果很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14453089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档