Puis-je obtenir en ligne les utilisateurs dans ma liste d'amis via Smack?
Question
Puis-je obtenir en ligne les utilisateurs dans ma liste d'amis via l'API Smack? Est-il possible?
Je travaille sur l'application qui ont le chat entre les utilisateurs. J'avais créé avec succès exemple d'application chat, à saisir le nom d'un ami et d'envoyer le chat, mais maintenant je veux ma liste d'amis en ligne.
La solution
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());
}
Autres conseils
XMPPConnection.addConnectionCreationListener(new ConnectionCreationListener() {
@Override
public void connectionCreated(Connection arg0) {
Log.i(TAG, "receive xmpp connection : " + arg0);
connection = arg0;
roster = arg0.getRoster();
Collection<RosterEntry> entries = roster.getEntries();
Presence presence;
Log.e(TAG, "user count" + entries.size());
for (RosterEntry entry : entries) {
presence = roster.getPresence(entry.getUser());
Log.i(TAG, "" + entry.getUser());
Log.i(TAG, "" + presence.getType().name());
Log.i(TAG, "" + presence.getStatus());
}
}
});
Ainsi, au début de votre programme du registre que l'auditeur de XMPPConnection, généralement, il prend quelques secondes pour recevoir l'objet de connexion. Mais il ne fonctionnera que si vous utiliserez creatEntry seulement dans ce coq de cas voir les utilisateurs créés.
Pour l'entrée creat en utilisant le code suivant Roster utiliser:
try {
rooster.createEntry("name", "user_id", null);
} catch (XMPPException e) {
e.printStackTrace();
}
Je n'utilise aucun groupe, et avec succès voir l'utilisateur sur le deuxième appareil.
Presence presence = roster.getPresence("tom@jabber.org");
if (presence.getType() == Presence.Type.AVAILABLE) {
// Tom is online...
}
smackAndroid = SmackAndroid.init(this);
XMPPConnection.addConnectionCreationListener(new ConnectionCreationListener() {
@Override
public void connectionCreated(XMPPConnection connection) {
Log.i("hello", "receive xmpp connection : " + connection);
roster = connection.getRoster();
try {
roster.createEntry("2868254", "hello", null);
} catch (XMPPException e) {
e.printStackTrace();
} catch (NotLoggedInException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoResponseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NotConnectedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});