2011-01-12 9 views
9

Smack API経由で友達リストのオンラインユーザーを入手できますか?出来ますか?スマックで友人リストのオンラインユーザーを入手できますか?

私は、ユーザー間でチャットを行うアプリを開発中です。私は正常に友人の名前を入力してチャットを送信するチャットアプリケーションの例を作成したが、今私はオンライン友達のリストが欲しい。

答えて

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

ありがとう、butin私は状態をオンラインまたはオフラインで判断することができますこれをクリアすることができますか? –

+1

私は同じコードを実行しましたが、すべてのユーザーは単にプレゼンスを「利用不可能」にしていますが、すでに利用可能な状態になっている可能性はありますが、私には表示されません。 –

+2

同じです。ステータスが利用できなくなるだけです:/ –

1

ユーザーのモードを取得するにはpresence.getMode()メソッドを使用します。 モードはenumで、その値はチャット、利用可能、離れている、xa、dndです。

4
Presence presence = roster.getPresence("[email protected]"); 
if (presence.getType() == Presence.Type.AVAILABLE) { 
    // Tom is online... 
} 

this link

+0

私はxmppに関するいくつかの質問をする必要がある、私はリストビューで私の名簿の友人を得ることができる今私はlistviewでオンラインユーザーだけを表示したいどのような方法はあなたが私を案内してくださいします –

+0

はアンドロイドロリポップで動作するのですか? –

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

を私は任意のグループを使用し、成功を収めて第二のデバイス上でユーザーが表示されませんでした。

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

私のコードの上にはオンラインユーザーがいません –

+0

これにいくつかの説明を追加できますか? – apaul

関連する問題