Android基於XMPP Smack openfire 開發的聊天室(二) 【聊天資訊、成員】
上一篇呢說了怎麼進入這個聊天室,這次呢,我們就說聊天室裡的功能吧,聊天資訊、成員變動什麼的。還是少說廢話,正題:
1,說要聊天呢,簡單就是一個文字資訊,當然我們不能時時去伺服器獲取資訊。要充分發揮即時推送嘛。
(1)首先要新增一個監聽,muc.addMessageListener(chatListener); 要是muc不知道是什麼請看上一篇吧,這就不多解釋。chatListener就是我們的監聽器,看程式碼,其實下邊的程式碼有些囉嗦。我只是懶得改了。最近有點煩躁。這裡我們主要獲取的就是Packet,這個是一個XMPP包裝好的XML流,裡邊有你想要的東西。有興趣深入的朋友可以上XMPP中文翻譯組去看看,挺犀利的。
- /**
- * PacketListener 通過一個規定的過濾器提供一個機制來監聽資料包
- *
- * @author liaonaibo
- *
- */
- class ChatPacketListener implements PacketListener {
- private String _number;
- private Date _lastDate;
- private MultiUserChat _muc;
- private String _roomName;
- public ChatPacketListener(MultiUserChat muc) {
- _number = "0";
- _lastDate = new Date(0);
- _muc = muc;
- _roomName = muc.getRoom();
- }
- @Override
- public void processPacket(Packet packet) {
- Message message = (Message) packet;
- String from = message.getFrom();
- if (message.getBody() != null) {
- DelayInformation inf = (DelayInformation) message.getExtension(
- "x", "jabber:x:delay");
- Date sentDate;
- if (inf != null) {
- sentDate = inf.getStamp();
- } else {
- sentDate = new Date();
- }
- Log.i(TAG, "Receive old message: date="
- + sentDate.toLocaleString() + " ; message="
- + message.getBody());
- android.os.Message msg = new android.os.Message();
- msg.what = RECEIVE;
- Bundle bd = new Bundle();
- bd.putString("from", from);
- bd.putString("body", message.getBody());
- msg.setData(bd);
- handler.sendMessage(msg);
- }
- }
- }
2,下邊就是成員了,一個聊天室沒成員多離譜的事情啊,我們主要做的是把成員列表逃出來。其實有幾種方法可以弄出來的,我只是簡單的獲取成員的暱稱。可能有朋友會問為什麼不獲取成員的資訊呢。這個下一篇我會告訴你。
- /**
- * 獲取聊天室的所有成員
- */
- private void getAllMember() {
- Log.i(TAG, "獲取聊天室的所有成員");
- affiliates.clear();
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- Iterator<String> it = muc.getOccupants();
- while (it.hasNext()) {
- String name = it.next();
- name = name.substring(name.indexOf("/") + 1);
- affiliates.add(name);
- Log.i(TAG, "成員名字;" + name);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- android.os.Message msg = new android.os.Message();
- msg.what = MEMBER;
- handler.sendMessage(msg);
- }
- }).start();
- }
這篇結束,下篇寫寫聊天室的一些許可權的變更、成員的變更、主題變更什麼的。
相關文章
- Android基於XMPP Smack openfire 開發的聊天室(七) 【成員狀態、自身狀態】AndroidMac
- Android基於XMPP Smack openfire 開發的聊天室(一)【會議服務、聊天室列表、加入】AndroidMac
- Android基於XMPP Smack openfire 開發的聊天室(三) 【新舊記錄、踢人】AndroidMac
- Android基於XMPP Smack openfire 開發的聊天室(五) 【邀請、被邀請】AndroidMac
- Android基於XMPP Smack openfire 開發的聊天室(四) 【建立房間、表單;報文】AndroidMac
- Android基於XMPP Smack openfire 開發的聊天室(六) 【加入房間、許可權錯誤】AndroidMac
- 基於xmpp openfire smack開發之openfire介紹和部署[1]Mac
- 基於xmpp openfire smack開發之Android客戶端開發[3]MacAndroid客戶端
- 基於xmpp openfire smack開發之smack類庫介紹和使用[2]Mac
- 基於xmpp openfire smack開發之Android訊息推送技術原理分析和實踐[4]MacAndroid
- Android平臺下基於XMPP的IM研究(二 MultiUserChat 聊天室)Android
- android基於openfire+smack開發之【架構瞭解】AndroidMac架構
- 聊天室應用開發實踐(二):實現基於 Web 的聊天室Web
- 基於 golang + vue + websocket 開發的聊天室GolangVueWeb
- 基於webapi的websocket聊天室(番外二)WebAPI
- 基於golang的聊天室Golang
- 基於Openfire Smack開發即時通訊應用、Spark安裝,註冊,登入,退出登入(二)MacSpark
- 基於netty的聊天室Netty
- Smack 4.1.0-beta1 釋出,XMPP 開發包Mac
- Apache MiNa + smack +openfilre 實現多人聊天室ApacheMac
- 基於webapi的websocket聊天室(四)WebAPI
- 基於XMPP協議(openfire伺服器)的訊息推送實現協議伺服器
- 基於LINUX的多功能聊天室Linux
- 基於XMPP的即時通訊系統的建立(二)— XMPP詳解
- 基於XMPP協議開發Android即時通訊軟體協議Android
- smack和openfire通訊的簡單例子Mac單例
- C++ 實現基於TCP的聊天室C++TCP
- 基於webapi的websocket聊天室(番外一)WebAPI
- 如何快速開發 Web 聊天室Web
- zphp,swoole開發chat聊天室PHP
- 求救:開發jsp聊天室!JS
- C#連線基於Java開發IM——OpenfireC#Java
- 基於 flask 結合 Redis 的簡單聊天室FlaskRedis
- 15.基於UDP協議的聊天室程式UDP協議
- android socket聊天室——也不僅僅是聊天室Android
- xmpp實現的即時通訊聊天(二)
- 【XMPP】Smack原始碼之初步認識Mac原始碼
- 基於XMPP協議的Android即時通訊系協議Android