10

Smack API を使用してフレンド リストにオンライン ユーザーを取得できますか? 出来ますか?

ユーザー間でチャットするアプリに取り組んでいます。友達の名前を入力してチャットを送信するだけのチャットアプリケーションの例を作成できましたが、オンラインの友達リストが必要です。

4

5 に答える 5

21
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());
}
于 2011-01-12T06:39:09.833 に答える
6
    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 番目のデバイスでユーザーが表示されます。

于 2014-02-12T12:53:11.987 に答える
4
Presence presence = roster.getPresence("tom@jabber.org");
if (presence.getType() == Presence.Type.AVAILABLE) {
   // Tom is online...
}

このリンクからの参照

于 2012-02-09T13:25:34.487 に答える
1

メソッドを使用してpresence.getMode()、ユーザーのモードを取得します。モードは列挙型で、その値は、chat、available、a​​way、xa、dnd のいずれかです。

于 2011-01-12T12:13:57.457 に答える