Smackで友達リストにオンラインユーザーを取得できますか?
質問
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を使用する場合にのみ機能します。Roosterは作成されたユーザーを表示します。
名簿を使用してエントリを作成するには、次のコードを使用します。
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()
ユーザーのモードを取得する方法。モードは列挙で、その値はチャット、利用可能、アウェイ、XA、DNDになります。
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();
}
}
});
所属していません StackOverflow