Jaymin
Jaymin

Reputation: 2912

Android: How do i get user online/offline status using quickblox?

I am not able to get the user online/offline status in QuickBlox. I have tried using QBRoster.

The function that I have written to get user presence.

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

Upvotes: 1

Views: 690

Answers (3)

Apurva Kolapkar
Apurva Kolapkar

Reputation: 1270

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
}

This can also help you :

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

    }
};

This link is helpful : https://quickblox.com/developers/Android_XMPP_Chat_Sample

Upvotes: 4

Anmol317
Anmol317

Reputation: 1376

The above answer is correct and you can use it like this

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

Upvotes: 2

Anmol317
Anmol317

Reputation: 1376

You can use this code

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

Upvotes: 0

Related Questions