2

私はたくさん探してきました。しかし、何も見つかりませんでした。連絡先の状態を rosterlistener で更新する必要があります。(オフライン/オンライン)。名簿を作成するときは、次のことを行います。

Presence presence = roster.getPresence(r.getUser());
                if(presence.isAvailable()){
                    userstatus.add("online");
                }else{
                    userstatus.add("offline");
                }

userstatus はベクトル文字列です。それから文字列配列を作成します。私のメインプログラムでは、この攪拌配列をオフラインまたはオンラインでチェックするだけです。しかし、ユーザーがオフライン/オンラインになった場合の対処方法。リスナーを正確にどこに置く必要があり、どのように正確に使用する必要がありますか?

4

1 に答える 1

6

メソッドを実装しRosterListenerて利用しますpresenceChanged()これは、 Smack のドキュメントに記載されているとおりのサンプル コードです。

Roster roster = con.getRoster();
roster.addRosterListener(new RosterListener() {
    // Ignored events public void entriesAdded(Collection<String> addresses) {}
    public void entriesDeleted(Collection<String> addresses) {}
    public void entriesUpdated(Collection<String> addresses) {}
    public void presenceChanged(Presence presence) {
        System.out.println("Presence changed: " + presence.getFrom() + " " + presence);
    }
});

JavaDoc では、変更イベントで受信したプレゼンスを使用するのではなく、利用可能な最適なプレゼンスを毎回確認することを提案していることに注意してください。

プレゼンスの更新後にユーザーの現在の「最適なプレゼンス」を取得するには、名簿にクエリを実行します。

String user = presence.getFrom();
Presence bestPresence = roster.getPresence(user);

これにより、優先度と可用性が最も高いユーザーのプレゼンス値が返されます。

于 2011-05-17T16:23:01.410 に答える