【发布时间】:2018-02-02 10:47:50
【问题描述】:
我正在创建一个简单的一对一聊天应用程序,我已经完成了消息的发送和接收。现在我正在尝试向另一个(联系人)显示用户的状态,例如“在线/离线”等。为此,我必须使用 Presence 和 Roster。但我不知道在哪里以及如何使用它,我的意思是订阅请求和接受的完整流程以及订阅后的用户状态,即在线/离线等。
【问题讨论】:
-
你试过了吗?
我正在创建一个简单的一对一聊天应用程序,我已经完成了消息的发送和接收。现在我正在尝试向另一个(联系人)显示用户的状态,例如“在线/离线”等。为此,我必须使用 Presence 和 Roster。但我不知道在哪里以及如何使用它,我的意思是订阅请求和接受的完整流程以及订阅后的用户状态,即在线/离线等。
【问题讨论】:
首先您需要发送并接受联系请求
从Open-fire你也可以从后端
步骤: 首先点击用户/组>>点击“用户名”>>点击名册>>添加名册
这里我附上步骤屏幕
然后您将使用此代码获得名册列表
ArrayList<RosterEntry> rosterLists = new ArrayList<>();
public List<RosterEntry> getFriendsList() throws SmackException.NotLoggedInException, InterruptedException, SmackException.NotConnectedException {
rosterLists = new ArrayList<>();
roster = Roster.getInstanceFor(Config.conn1);//connection object of AbstractXMPPConnection
if (!roster.isLoaded()) {
roster.reloadAndWait();
Log.e("Roster :", "Reload and wait");
}
Collection<RosterEntry> entries = roster.getEntries();
Log.e("Size of Roster :", entries.size() + "");
for (RosterEntry entry : entries) {
rosterLists.add(entry);
Log.d("Buddies", "Here: " + entry.toString());
Log.d("Buddies", "User: " + entry.getUser());//get userinfo
Log.d("Buddies", "User Name:" + entry.getName());//get username
Log.d("Buddies", "User Status: " + entry.getStatus());//get status of user
}
listAdapter = new FriendUserListAdapter(UserListActivity.this, rosterLists);
user_list.setAdapter(listAdapter);
return rosterLists;
}
订阅类型和订阅类型有什么区别??? 当任何用户添加 bot 有他/她的联系人时,在整个过程结束时,ofRoster(openfire) 表的订阅状态设置为“来自”。这个过程的期望结果是“两者”
【讨论】: