
Smack3.4.1文档翻译:隐私,Privacy
这是什么?
隐私
(
Privacy
)
,是一种让用户可屏蔽掉特定的其它用户的通信信息的方法。
在
XMPP
中,
这个功能是通过管理每个用户的隐私列表来实现的。
服务器
端的隐私列表
实现了以下功能:
•.获取某个用户的隐私列表。
•.添加、删除及编辑某个用户的隐私列表。
•.设置、改变或禁用活跃的列表。
•.设置、改变或禁用默认列表(默认就活跃的列表)。
•.根据JID、分组或订阅类型(或全局地)来允许或屏蔽消息。
•.根据JID、分组或订阅类型(或全局地)来允许或屏蔽从外部发来的在线状态通知。
•.根据JID、分组或订阅类型(或全局地)来允许或屏蔽向外部发出的在线状态通知。
•.根据JID、分组或订阅类型(或全局地)来允许或屏蔽信息/查询对(IQ)数据。
•.根据JID、分组或订阅类型(或全局地)来允许或屏蔽所有的通信数据。
如何使用 ?
在当前的应用编程接口中,有三种主要的公有类:
•. PrivacyListManager : 这是主要的接口类,用于获取并处理服务器端的隐私列表。
•. PrivacyList : 它表示一个隐私列表,它拥有一个名字以及一组隐私条目对象。例如,某个列表 中会包含有可见或不可见的用户。
•. PrivacyItem : 具体 地 屏蔽 或允许某人的隐私信息。例如,允许 我的某个好友看到 我的在线状态。
1. 一开始,一个客户端 可以 从服务器上 获取 他/她/它的隐私列表 :
// 创建 一个针对当前连接的隐私管理器。
PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(myConnection);
// 获取服务器 端的隐私列表
PrivacyList[] lists = privacyManager.getPrivacyLists();
现在, 该客户端可以显示 出服务器上 的每个 PrivacyItem , 还可以显示出每个活跃列表、默认列表,或者什么都不显示。 该客户端即为隐私变更事件 的一个监听器。
2. 为了 向服务器添加一个新的列表 ,客户端 可以 实现类似以下的代码:
// 设置 该列表的名字
String listName = "newList" ;
// 创建 一个由 PrivacyItem 组成的列表,它们会允许或屏蔽掉某个方面的隐私
String user = "tybalt@example.com" ;
String groupName = "enemies" ;
ArrayList privacyItems = new ArrayList();
PrivacyItem item = new PrivacyItem(PrivacyRule. JID , true , 1);
item.setValue(user);
privacyItems.add(item);
item = new PrivacyItem(PrivacyRule. SUBSCRIPTION , true , 2);
item.setValue(PrivacyRule. SUBSCRIPTION_BOTH );
privacyItems.add(item);
item = new PrivacyItem(PrivacyRule. GROUP , false , 3);
item.setValue(groupName);
item.setFilterMessage( true );
privacyItems.add(item);
// 获取针对当前连接 的隐私管理器。
PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(myConnection);
// 创建 新列表。
privacyManager.createPrivacyList(listName, Arrays. asList (privacyItems));
3. 要想 修改 一个已有的列表 ,客户端 可 采用类似下面的代码:
// 设置列表 的名字
String listName = "existingList" ;
// 获取针对当前连接 的隐私管理器。
PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(myConnection);
// 将新的列表发送到服务器。
privacyManager.updatePrivacyList(listName, items);
注意 , items 是在示例 2 中定义的,并且 必须 包含列表中所有的元素( 而不是“增量信息” )。
4. 要想 删除 一个已有的列表 ,客户 端 可 采用类似下面的代码:
// 设置列表 的名字
String listName = "existingList" ;
// 获取针对当前连接 的隐私管理器。
PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(myConnection);
// 删除 该列表。
privacyManager.deletePrivacyList(listName);
5. 要想 禁用 掉一个活跃列表 , 客户 端 可 采用类似下面的代码:
// 获取针对当前连接 的隐私管理器。
PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(myConnection);
// 禁用 该活跃列表。
privacyManager.declineActiveList();
6. 要想 禁用 掉一个默认列表 , 客户 端 可 采用类似下面的代码:
// 获取针对当前连接 的隐私管理器。
PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(myConnection);
// 禁用 该默认列表。
privacyManager.declineDefaultList();
监听隐私信息 的变更
要想处理隐私信息变更事件,客户端
应当
监听管理器的更新信息。
当某个列表发生改变时,管理器会通知每个之前被加入的监听器。监听
器
必须
实现
PrivacyListListener
接口。客户
端可能需要在隐私列表发生变更时作出响应。
最重要的通知就是
updatedPrivacyList
,
当某个隐私列表改变它的隐私条目时,
便会发出该通知。
执行
以下代码之后,监听器便能够收到通知了:
// 获取针对当前连接 的隐私管理器。
PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(myConnection);
// 添加 要被通知的监听器 (this)
privacyManager.addListener( this );
参考
•. RFC3921 中的 通信屏蔽 。
未知美人
未知美人
HxLauncher: Launch Android applications by voice commands