我可以通过Smack获取我朋友列表中的在线用户吗?

chi*_*dev 9 api android smack

我可以通过Smack API获取我朋友列表中的在线用户吗?可能吗?

我正在开发用户之间聊天的应用程序.我已经成功创建了聊天应用程序示例,只需输入朋友的名字并发送聊天,但现在我想要在线好友列表.

Jig*_*hua 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());
}
Run Code Online (Sandbox Code Playgroud)

  • 同样在这里.我只是得到状态不可用:/ (3认同)

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

        }
    });
Run Code Online (Sandbox Code Playgroud)

因此,在程序开始时注册XMPPConnection监听器,通常需要几秒钟才能收到连接对象.但它只有在你只使用creatEntry的情况下才会起作用.在这种情况下,公鸡会看到那些创建的用户.

要使用Roster创建条目,请使用下一个代码:

try {
    rooster.createEntry("name", "user_id", null);
} catch (XMPPException e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

我没有使用任何组,并且成功地在第二个设备上看到用户.