Android基於XMPP Smack openfire 開發的聊天室(二) 【聊天資訊、成員】

yangxi_001發表於2014-03-05

上一篇呢說了怎麼進入這個聊天室,這次呢,我們就說聊天室裡的功能吧,聊天資訊、成員變動什麼的。還是少說廢話,正題:

1,說要聊天呢,簡單就是一個文字資訊,當然我們不能時時去伺服器獲取資訊。要充分發揮即時推送嘛。

      (1)首先要新增一個監聽,muc.addMessageListener(chatListener);   要是muc不知道是什麼請看上一篇吧,這就不多解釋。chatListener就是我們的監聽器,看程式碼,其實下邊的程式碼有些囉嗦。我只是懶得改了。最近有點煩躁。這裡我們主要獲取的就是Packet,這個是一個XMPP包裝好的XML流,裡邊有你想要的東西。有興趣深入的朋友可以上XMPP中文翻譯組去看看,挺犀利的。

  1. /** 
  2.      * PacketListener 通過一個規定的過濾器提供一個機制來監聽資料包 
  3.      *  
  4.      * @author liaonaibo 
  5.      *  
  6.      */  
  7.     class ChatPacketListener implements PacketListener {  
  8.         private String _number;  
  9.         private Date _lastDate;  
  10.         private MultiUserChat _muc;  
  11.         private String _roomName;  
  12.   
  13.         public ChatPacketListener(MultiUserChat muc) {  
  14.             _number = "0";  
  15.             _lastDate = new Date(0);  
  16.             _muc = muc;  
  17.             _roomName = muc.getRoom();  
  18.         }  
  19.   
  20.         @Override  
  21.         public void processPacket(Packet packet) {  
  22.             Message message = (Message) packet;  
  23.             String from = message.getFrom();  
  24.   
  25.             if (message.getBody() != null) {  
  26.                 DelayInformation inf = (DelayInformation) message.getExtension(  
  27.                         "x""jabber:x:delay");  
  28.                 Date sentDate;  
  29.                 if (inf != null) {  
  30.                     sentDate = inf.getStamp();  
  31.                 } else {  
  32.                     sentDate = new Date();  
  33.                 }  
  34.   
  35.                 Log.i(TAG, "Receive old message: date="  
  36.                         + sentDate.toLocaleString() + " ; message="  
  37.                         + message.getBody());  
  38.   
  39.                 android.os.Message msg = new android.os.Message();  
  40.                 msg.what = RECEIVE;  
  41.                 Bundle bd = new Bundle();  
  42.                 bd.putString("from", from);  
  43.                 bd.putString("body", message.getBody());  
  44.                 msg.setData(bd);  
  45.                 handler.sendMessage(msg);  
  46.             }  
  47.         }  
  48.     }  


2,下邊就是成員了,一個聊天室沒成員多離譜的事情啊,我們主要做的是把成員列表逃出來。其實有幾種方法可以弄出來的,我只是簡單的獲取成員的暱稱。可能有朋友會問為什麼不獲取成員的資訊呢。這個下一篇我會告訴你。

  1. /** 
  2.      * 獲取聊天室的所有成員 
  3.      */  
  4.     private void getAllMember() {  
  5.         Log.i(TAG, "獲取聊天室的所有成員");  
  6.         affiliates.clear();  
  7.           
  8.         new Thread(new Runnable() {  
  9.             @Override  
  10.             public void run() {  
  11.                 try {  
  12.                     Iterator<String> it = muc.getOccupants();  
  13.                     while (it.hasNext()) {  
  14.                         String name = it.next();  
  15.                         name = name.substring(name.indexOf("/") + 1);  
  16.                         affiliates.add(name);  
  17.                         Log.i(TAG, "成員名字;" + name);  
  18.                     }  
  19.   
  20.                 } catch (Exception e) {  
  21.                     e.printStackTrace();  
  22.                 }  
  23.   
  24.                 android.os.Message msg = new android.os.Message();  
  25.                 msg.what = MEMBER;  
  26.                 handler.sendMessage(msg);  
  27.             }  
  28.         }).start();  
  29.     }  


這篇結束,下篇寫寫聊天室的一些許可權的變更、成員的變更、主題變更什麼的。

相關文章