该功能是基于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 最新源码