`
xiaoheliushuiya
  • 浏览: 401862 次
文章分类
社区版块
存档分类
最新评论

Android Xmpp 黑名单

 
阅读更多
简介

该功能是基于Xmpp协议的ejabberd服务器黑名单的实现。黑名单的作用是把消息扼杀在服务器中。

由于功能强大,代码实现简单,这就不做任何介绍直接贴出代码了,懂Xmpp同学一看便知。


功能代码

功能分为:添加黑名单、删除黑名单、获取黑名单s,这些功能代码经测试通过(只是实现功能,而未优化代码),代码如下:

	public boolean addToPrivacyList(String name) { // 添加到黑名单
		try {
			PrivacyListManager privacyManager = PrivacyListManager
					.getInstanceFor(XmppTool.getConnection());
			if (privacyManager == null) {
				return false;
			}

			PrivacyList[] plists = privacyManager.getPrivacyLists();
			if (plists.length == 0) {// 没有黑名单或是名单中没有列,直接getPrivacyList会出错
				List<PrivacyItem> items = new ArrayList<PrivacyItem>();
				Log.i("", "addToPrivacyList plists.length==0");
				PrivacyItem newitem = new PrivacyItem("jid", false, 100);
				newitem.setValue("BLACKNAME" + "@"
						+ XmppTool.getConnection().getServiceName());
				items.add(newitem);

				privacyManager.updatePrivacyList(Black_List, items);
				privacyManager.setActiveListName(Black_List);
				return true;
			}

			PrivacyList plist = privacyManager.getPrivacyList(Black_List);
			if (plist != null) {
				String ser = "@" + XmppTool.getConnection().getServiceName();

				List<PrivacyItem> items = plist.getItems();
				for (PrivacyItem item : items) {
					String from = item.getValue().substring(0,
							item.getValue().indexOf(ser));
					Log.i("",
							"addToPrivacyList item.getValue=" + item.getValue());
					if (from.equalsIgnoreCase(name)) {
						items.remove(item);
						break;
					}
				}

				PrivacyItem newitem = new PrivacyItem("jid", false, 100);
				newitem.setValue(name + "@"
						+ XmppTool.getConnection().getServiceName());
				items.add(newitem);
				Log.i("", "addToPrivacyList item.getValue=" + newitem.toXML());
				Log.i("", "deleteFromPrivacyList items size=" + items.size());
				privacyManager.updatePrivacyList(Black_List, items);
				privacyManager.setActiveListName(Black_List);

			}
			return true;
		} catch (XMPPException ex) {
			// Logger.getLogger(XMPP.class.getName()).log(Level.SEVERE, null,
			// ex);
		}
		return false;
	}

	public boolean deleteFromPrivacyList(String name) {// 删除黑名单

		try {
			PrivacyListManager privacyManager = PrivacyListManager
					.getInstanceFor(XmppTool.getConnection());
			if (privacyManager == null) {
				return false;
			}
			PrivacyList plist = privacyManager.getPrivacyList(Black_List);
			if (plist != null) {
				String ser = "@" + XmppTool.getConnection().getServiceName();

				List<PrivacyItem> items = plist.getItems();
				for (PrivacyItem item : items) {
					String from = item.getValue().substring(0,
							item.getValue().indexOf(ser));
					Log.i("",
							"deleteFromPrivacyList item.getValue="
									+ item.getValue());
					if (from.equalsIgnoreCase(name)) {
						Log.i("", "deleteFromPrivacyList find object");
						items.remove(item);
						break;
					}
				}
				Log.i("", "deleteFromPrivacyList items size=" + items.size());
				privacyManager.updatePrivacyList(Black_List, items);
			}
		} catch (XMPPException ex) {
		}
		return true;
	}

	public List<String> getPrivacyList() { // 获取所有黑名单
		List<String> privacyList = new ArrayList<String>();
		try {
			PrivacyListManager privacyManager = PrivacyListManager
					.getInstanceFor(XmppTool.getConnection());
			if (privacyManager == null) {
				return privacyList;
			}
			String ser = "@" + XmppTool.getConnection().getServiceName();
			PrivacyList plist = privacyManager.getPrivacyList(Black_List);
			if (plist == null) {// 没有黑名单或是名单中没有列,直接getPrivacyList会出错
				List<PrivacyItem> items = plist.getItems();
				for (PrivacyItem item : items) {
					String from = item.getValue().substring(0,
							item.getValue().indexOf(ser));
					privacyList.add(from);
				}
			} else {
				return privacyList;
			}
		} catch (XMPPException ex) {
		}
		return privacyList;
	}


结论

功能强大,代码简单。

http://asmack.freakempire.de 获取asmack 最新源码

分享到:
评论
1 楼 moziandli 2014-08-27  
privacyManager   为何这个一直为null呢   大哥  

相关推荐

Global site tag (gtag.js) - Google Analytics