Roster和Presence
Roster实例使用 方法获得.
每个用户在Roster
中由RosterEntry
表示,这包括:
- 一个XMPP地址 (例如: jsmith@example.com).
- 一个你分配给用户的名字(如:”Joe”).
下面的代码片段打印Roster中的所有entry:
Roster
中的每个登陆有presence
与之关联。Roster.getPresence(String user)
方法可以返回一个用户Presence
的对象,如果用户不在线或您没有订阅用户的presence
将会返回null
。
注意:一般而言,presence
预订一般受用户是否在roster中的约束,但这并不适应所有情况。
一个用户可以有在线或离线两种。当用户在线时,他们的可能包含外延信息,如他们正在做什么,他们是否愿意被打扰等等。参考Presence类以获得更多细节信息。
presence信息很可能经常变化,roster
登陆也可能经常改变或被删除。
为了监听roster
和presence
数据的变化,您应该使用RosterListener
。
下面的代码片段注册了一个roster的RosterListener
,它能够在标准输出中打印任何presence的变化。一个标准的客户端可以使用类似的代码用变化的信息来更新roster用户界面。
Roster roster = Roster.getInstanceFor(con);
roster.addRosterListener(new RosterListener() {
// Ignored events public void entriesAdded(Collection<String> addresses) {}
public void entriesDeleted(Collection<String> addresses) {}
public void entriesUpdated(Collection<String> addresses) {}
}
});
roster
和presence
使用一种基于许可的模式,用户只有在被许可的情况下才能被添加到别人的roster中。这样可以保护用户的隐私因为只有经核准的其它用户才能查看他们的 presence信息。因此,只有当其它用户接受您的请求时您才能添加新的roster登陆。
如果一个用户请求presence
预订,因此他们可以把您添加到他们的roster
中,您必须接受或拒绝该请求。 Smack通过以下三种方式中的一种处理presence
预订请求:
- 自动接受所有
presence
预订请求。 - 自动拒绝所有
presence
预订请求。