Android基于XMPP Smack openfire 开发的聊天室(一)【会议服务、聊天室列表、加入】

发布时间:2014-10-23 23:29:51
来源:分享查询网

Android基于XMPP Smack openfire 开发的聊天室(一)【会议服务、聊天室列表、加入】 分类: Android XMPP2012-04-19 09:54 13443人阅读 评论(42) 收藏 举报 聊天smackxmppandroiditeratorjoin         废话少说,公司没事干,组长叫我写Demo,我狂晕....         先把先说说这个什么聊天室吧,服务器就别说了,典型的拿来主义。用的是成品的openfire。说道smack,这个是一个jar文件,库,是用在javae的。要想在android端使用这个,就要用到asmack包,这个可以在官网下。其实里边跟smack包没什么区别,具体差异目前我没发现。         可能有的朋友说这个smack是什么用的,我个人一句话,一个已经包装了XMPP协议的架包。提供了API的操作...好了进入正题   1,首先想进入聊天室,那必须要先知道聊天室所在的会议服务(下图,用spark截图) [java] view plaincopyprint? /**       * 初始化聊服务会议列表       */       private void initHostRoom() {           Collection<HostedRoom> hostrooms;           try {               hostrooms = MultiUserChat.getHostedRooms(Constants.conn,                       Constants.conn.getServiceName());               for (HostedRoom entry : hostrooms) {                   roominfos.add(entry);                   Log.i(TAG, "名字:" + entry.getName() + " - ID:" + entry.getJid());               }               Log.i(TAG, "服务会议数量:" + roominfos.size());           } catch (XMPPException e) {               e.printStackTrace();           }       }     2,获取了那个服务的JID后才能进入会议列表: [java] view plaincopyprint? /**       * 初始化房间列表       */       public void init() {           listDiscoverItems = new ArrayList<DiscoverItems.Item>();           // 获得与XMPPConnection相关的ServiceDiscoveryManager           ServiceDiscoveryManager discoManager = ServiceDiscoveryManager                   .getInstanceFor(Constants.conn);              // 获得指定XMPP实体的项目           // 这个例子获得与在线目录服务相关的项目           DiscoverItems discoItems;           try {               discoItems = discoManager.discoverItems(jid);               // 获得被查询的XMPP实体的要查看的项目               Iterator it = discoItems.getItems();               // 显示远端XMPP实体的项目               while (it.hasNext()) {                   DiscoverItems.Item item = (DiscoverItems.Item) it.next();                   System.out.println(item.getEntityID());                   System.out.println(item.getName());                   listDiscoverItems.add(item);               }           } catch (XMPPException e) {               e.printStackTrace();           }       }   3,同样,要进入会议房间(聊天室)也要获取它的ID,才能进入   [java] view plaincopyprint? // 后面服务名称必需是创建房间的那个服务           jid = getIntent().getStringExtra("jid");           try {               muc = new MultiUserChat(Constants.conn, jid);               // 创建聊天室,进入房间后的nickname(昵称)               muc.join("痞子测试");               Log.v(TAG, "join success");           } catch (XMPPException e) {               e.printStackTrace();           }   简单吧!   好了,这一篇就到这里,下一篇是聊天室内部的一些处理。

返回顶部
查看电脑版