首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不可用,所有名册的状态为空

不可用,所有名册的状态为空
EN

Stack Overflow用户
提问于 2015-07-23 07:02:38
回答 1查看 1.4K关注 0票数 1

我正在创建一个XMPP Android聊天客户端,并使用 libraryOpenfire服务器。

我希望从我的名册列表中获得所有花名册的存在,并显示所有在线花名册,但是当我检查花名册的存在时,它给了我不可用的所有花名册,并且状态为空。

下面是我的代码如何创建一个名册和检查是否存在?

设置存在性

代码语言:javascript
复制
Presence presence = new Presence(Presence.Type.available);
presence.setStatus("I’m available");
connection.sendPacket(presence);

获取名册列表并检查是否存在

代码语言:javascript
复制
Collection<RosterEntry> entries = roster.getEntries();
Log.e("Roster Entries","Roster Entries"+entries);
//loop through
for (RosterEntry entry : entries) {
    //example: get presence, type, mode, status
    Presence entryPresence = roster.getPresence(entry.getUser());
    Presence.Type userType = entryPresence.getType();
    Presence.Mode mode = entryPresence.getMode();
    String status = entryPresence.getStatus();
    int state = retrieveState_mode (entryPresence.getMode()         ,entryPresence.isAvailable());
    Log.e("Presence Status","Presence status "+entryPresence.toString()+"  type  "+userType+"  mode  "+mode+"  status "+status+" state "+state);
}

retriveState_mode()

代码语言:javascript
复制
public static int retrieveState_mode(Presence.Mode userMode, boolean isOnline) {
    int userState = 0;
    /** 0 for offline, 1 for online, 2 for away,3 for busy*/
    if(userMode == Presence.Mode.dnd) {
        userState = 3;
    } else if (userMode == Presence.Mode.away || userMode == Presence.Mode.xa) {
        userState = 2;
    } else if (isOnline) {
        userState = 1;
    }
    return userState;
}

我在日志里看到了这个:

代码语言:javascript
复制
Roster Entries﹕ Roster Entries[tusha: tusha, tushar: tushar]
Presence status unavailable  type  unavailable  mode  null  status null state 0
Presence status unavailable  type  unavailable  mode  null  status null state 0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-07 16:40:54

正如我之前的经验,您可以看到状态和其他从存在中,您需要订阅用户。

例如:用户A想查看用户B的状态和可用状态,在这种情况下,用户A需要订阅用户B。在用户A能够看到用户B的存在之后。

订阅代码

代码语言:javascript
复制
try {
            roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.manual);
            String userName = responders.getUsers().get(i).getUsername();
            roster.createEntry("userB@domain", userName, null);
            Presence pres = new Presence(Presence.Type.subscribe);
            pres.setFrom("userA@domain");
            connection.sendStanza(pres);
        } catch (Exception e) {
            android.util.Log.e("tag", "unable to add contact: ", e);
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31580333

复制
相关文章

相似问题

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