Android:如何使用quickblox获得用户在线/离线状态?

时间:2017-05-17 12:23:16

标签: android quickblox

我无法在QuickBlox中获得用户在线/离线状态。我尝试过使用 QBRoster

我为了吸引用户而编写的功能。

private void subscribeUserForStatus(ArrayList<Integer> mQBUserList) {

    if (QBChatService.getInstance().getRoster() != null) {
        mQbRoster = QBChatService.getInstance().getRoster(
                QBRoster.SubscriptionMode.mutual, this);
        mQbRoster.addRosterListener(this);

        for (Integer mId : mQBUserList) {

            try {

                    if (mQbRoster.contains(mId)) {
                    mQbRoster.subscribe(mId);

                 } else {
                     mQbRoster.createEntry(mId, null);

                }

            } catch (SmackException.NotConnectedException e) {
                e.printStackTrace();
                Log.e("Crash on subscription", e.getMessage());
            }
        }
    }
}

3 个答案:

答案 0 :(得分:4)

@mixin dummy(
  $a: true,
  $b: false,
  $c: auto
) {
  // do stuff
}

$params: (
  a: false,
  xyz: 'foo'
);

@include dummy($params...);

这也可以帮到你:

int userID = 45;

QBPresence presence = chatRoster.getPresence(userID);
if (presence == null) {
    // No user in your roster
    return;
}

if (presence.getType() == QBPresence.Type.online) {
    // User is online
}else{
    // User is offline
}

此链接很有帮助: https://quickblox.com/developers/Android_XMPP_Chat_Sample

答案 1 :(得分:2)

以上答案是正确的,您可以像这样使用

QBRosterListener rosterListener = new QBRosterListener() {
@Override
public void entriesDeleted(Collection<Integer> userIds) {

}

@Override
public void entriesAdded(Collection<Integer> userIds) {

}

@Override
public void entriesUpdated(Collection<Integer> userIds) {

}

@Override
public void presenceChanged(QBPresence presence) {
      if (presence == null) {
// No user in your roster
return;
}

if (presence.getType() == QBPresence.Type.online) {
// User is online
}else{
// User is offline
}
}
};

答案 2 :(得分:0)

您可以使用此代码

Roster roster = xmppConnection.getRoster();
Collection<RosterEntry> entries = roster.getEntries();
Presence presence;

for(RosterEntry entry : entries) {
presence = roster.getPresence(entry.getUser());

System.out.println(entry.getUser());
System.out.println(presence.getType().name());
System.out.println(presence.getStatus());
}