Android基於XMPP Smack openfire 開發的聊天室(一)【會議服務、聊天室列表、加入】

yangxi_001發表於2014-03-05

廢話少說,公司沒事幹,組長叫我寫Demo,我狂暈....

        先把先說說這個什麼聊天室吧,伺服器就別說了,典型的拿來主義。用的是成品的openfire。說道smack,這個是一個jar檔案,庫,是用在javae的。要想在android端使用這個,就要用到asmack包,這個可以在官網下。其實裡邊跟smack包沒什麼區別,具體差異目前我沒發現。

        可能有的朋友說這個smack是什麼用的,我個人一句話,一個已經包裝了XMPP協議的架包。提供了API的操作...好了進入正題

 

1,首先想進入聊天室,那必須要先知道聊天室所在的會議服務(下圖,用spark截圖)

  1. /** 
  2.      * 初始化聊服務會議列表 
  3.      */  
  4.     private void initHostRoom() {  
  5.         Collection<HostedRoom> hostrooms;  
  6.         try {  
  7.             hostrooms = MultiUserChat.getHostedRooms(Constants.conn,  
  8.                     Constants.conn.getServiceName());  
  9.             for (HostedRoom entry : hostrooms) {  
  10.                 roominfos.add(entry);  
  11.                 Log.i(TAG, "名字:" + entry.getName() + " - ID:" + entry.getJid());  
  12.             }  
  13.             Log.i(TAG, "服務會議數量:" + roominfos.size());  
  14.         } catch (XMPPException e) {  
  15.             e.printStackTrace();  
  16.         }  
  17.     }  

 

2,獲取了那個服務的JID後才能進入會議列表:

  1. /** 
  2.      * 初始化房間列表 
  3.      */  
  4.     public void init() {  
  5.         listDiscoverItems = new ArrayList<DiscoverItems.Item>();  
  6.         // 獲得與XMPPConnection相關的ServiceDiscoveryManager  
  7.         ServiceDiscoveryManager discoManager = ServiceDiscoveryManager  
  8.                 .getInstanceFor(Constants.conn);  
  9.   
  10.         // 獲得指定XMPP實體的專案  
  11.         // 這個例子獲得與線上目錄服務相關的專案  
  12.         DiscoverItems discoItems;  
  13.         try {  
  14.             discoItems = discoManager.discoverItems(jid);  
  15.             // 獲得被查詢的XMPP實體的要檢視的專案  
  16.             Iterator it = discoItems.getItems();  
  17.             // 顯示遠端XMPP實體的專案  
  18.             while (it.hasNext()) {  
  19.                 DiscoverItems.Item item = (DiscoverItems.Item) it.next();  
  20.                 System.out.println(item.getEntityID());  
  21.                 System.out.println(item.getName());  
  22.                 listDiscoverItems.add(item);  
  23.             }  
  24.         } catch (XMPPException e) {  
  25.             e.printStackTrace();  
  26.         }  
  27.     }  


3,同樣,要進入會議房間(聊天室)也要獲取它的ID,才能進入

 

  1. // 後面服務名稱必需是建立房間的那個服務  
  2.         jid = getIntent().getStringExtra("jid");  
  3.         try {  
  4.             muc = new MultiUserChat(Constants.conn, jid);  
  5.             // 建立聊天室,進入房間後的nickname(暱稱)  
  6.             muc.join("痞子測試");  
  7.             Log.v(TAG, "join success");  
  8.         } catch (XMPPException e) {  
  9.             e.printStackTrace();  
  10.         }  


簡單吧!

 

好了,這一篇就到這裡,下一篇是聊天室內部的一些處理。

相關文章