Smack API を使用してフレンド リストにオンライン ユーザーを取得できますか? 出来ますか?
ユーザー間でチャットするアプリに取り組んでいます。友達の名前を入力してチャットを送信するだけのチャットアプリケーションの例を作成できましたが、オンラインの友達リストが必要です。
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());
}
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());
}
}
});
したがって、プログラムの開始時にその XMPPConnection リスナーを登録します。通常、接続オブジェクトを受信するのに数秒かかります。ただし、 creatEntry を使用する場合にのみ機能します。その場合、雄鶏は作成されたユーザーを見ることができます。
名簿を使用してエントリを作成するには、次のコードを使用します。
try {
rooster.createEntry("name", "user_id", null);
} catch (XMPPException e) {
e.printStackTrace();
}
私はグループを使用しませんでした。成功すると、2 番目のデバイスでユーザーが表示されます。
Presence presence = roster.getPresence("tom@jabber.org");
if (presence.getType() == Presence.Type.AVAILABLE) {
// Tom is online...
}
このリンクからの参照
メソッドを使用してpresence.getMode()
、ユーザーのモードを取得します。モードは列挙型で、その値は、chat、available、away、xa、dnd のいずれかです。