版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1.登陸 IMConnection.DEBUG_ENABLED = true;/首先激活調(diào)試模式1.1 建立連接首先,在啟動 DSM Message 時,客戶端通過 XMPPConnection 與服務(wù)器建立連接。建立連接的方式有兩種:1.直接連到服務(wù)器Connection conn = new XMPPConnection(localhost);/創(chuàng)建連接/其中“l(fā)ocalhost”是服務(wù)器地址,由于我用的是本機,所以是“l(fā)ocalhost”。conn.connect();/接通連接2.根據(jù)配置連接ConnectionConfiguration config = ConnectionConf
2、iguration();config.setServiceName(localhost);/還可以設(shè)置很多其他屬性,如隱身登陸Connection conn1 = new XMPPConnection(config);conn1.connect();1.2 用戶登陸建立連接之后就是用戶登陸了,openfire 是支持多終端登陸的,下面的就是指的是終端名稱,如 Smack、Spark 等。登陸的方法有兩個resourcelogin(String username, String password)和login(String username, String password, String re
3、source)具體例子如下,livsun 與 livsun1 是兩個用戶,都是 111conn.login(livsun, 111,Smack);resource 也可以缺省不設(shè)置conn1.login(livsun1, 111);本文后面默認 livsun 與livsun1 已經(jīng)登陸,且與服務(wù)器的連接分別 conn 和 conn1.1.3 斷開連接斷開連接只需調(diào)用 disconnect()方法,如 conn.disconnect();2.單人聊天2.1 發(fā)起會話請求作為一款 IM的通信協(xié)議,首要功能就是聊天。聊天包含兩種方式,主其他人發(fā)起會話;也可以接受別人的會話請求。下面是主動對別人發(fā)起會
4、話的實現(xiàn):conn.getChatManager.createChat(String userID, MessageListener listener)其中 userID 是本次livsun1z00189374 是不寫。請求的接收方的標志,如 UserID 是 livsun1z00189374/Smack,請求的接收方,/Smack 說明用戶是在哪個終端登陸的,可以缺省2.1.1 消息當想一個用戶發(fā)起會話請求,對方接受請求并創(chuàng)建會話后,對方可能發(fā)送消息回來,這時需要對接受的消息進行處理。這里要用到MessageListener。下例將創(chuàng)建一個會話并對收到的消息進行輸出:Chat chat =
5、conn.getChatManager().createChat(livsun1z00189374/Smack,new MessageListener()public void prosMessage(Chat chat0, Message message)ln(來自livsun1的消息,內(nèi)容為+message.getBody();System.out.pr);紅色 chat 是這次創(chuàng)建的對象,它在 livsun 跟 livsun1 之間建立一個會話連接;同事處理來自 livsun1 的消息。如果 livsun 想要發(fā)消息,需要用 chat 來調(diào)用 sendMessage方法。具體可見下例:c
6、hadMessage(o,Im livsun);2.1.2 會話請求通過上面例子可以知道 livsun 怎樣發(fā)送了一個消息給 livusn1。但是 livsun1 需要知道何時 livsun 發(fā)了一個消息給自己,同時還要對這個消息進行處理。Smack 提供了會話請求接口ChatManagerListener,每個用戶通過實現(xiàn)該接口,來這里再以 livsun1 為例來展示一下:沒一個會話的創(chuàng)建請求。chat.getChatManager. addChistener(ChatManagerListener listener)ChatManagerListener 只有一個方法 chatCreate
7、d(Chat chat,createdLocally),它用來處理當 chat 創(chuàng)建時的具體操作。具體請看下面例子:conn1.getChatManager().addChistener(new ChatManagerListener()public void chatCreated(Chat chat,createdLocal)/自己創(chuàng)建是指自己調(diào)用createChat方法,它也會觸發(fā)這個listener/在創(chuàng)建時就會制定MessageListener,這樣判斷主要是為了避免重復(fù)定義/MessageListerif(createdLocal)System.out.prln(這個chat是自己
8、創(chuàng)建的);/創(chuàng)建與livsun的,這里面可以通過message來獲取發(fā)送聊天請求的人信息elseSystem.out.prln(別人想跟我聊天);chat.addMessageListener(new MessageListener()public void prosMessage(Chat chat, Message message)System.out.prln(message.getFrom+想跟我聊天)dMessage(你好);cha););2.1.3 會話狀態(tài)通常用戶在參加一個會話時,想知道另一個用戶是否正在輸入。會話狀態(tài)有五種:active(參加會話), com停輸入)。ing(正
9、在輸入), gone(離開), inactive(沒有參加會話), paused(暫如果想要對會話狀態(tài),需要在用戶登陸之后,會話建立之前,添加 ChatSeManager對象,方法為 ChatSeManager.getInstance(XPMMConnectioconn);譬如獲取 livsun 連接的ChatSeManager 代碼是ChatSeManager csm = ChatSeManager(conn);在客戶端,根據(jù)用戶對于一個會話的不同操作,通過ChatSeManager 調(diào)用方法setCurrentSe(ChatSe newSe, Chat chat)來設(shè)置會話的即時狀態(tài)。如當
10、 livsun 正在打字輸入,則可以通過csm.setCurrentSe(ing, chat)來設(shè)置狀態(tài)為正在輸入。在客戶端,還需要對會話狀態(tài)改變進行,ChatSeListener 繼承 MessageListener,方法是 seChanged(Chat chat, ChatSe se),由于Chat 類沒有直接添加ChatSeListener的方法,因此需要自己編寫一個類實現(xiàn)ChatSeListener 和MessageListener 兩個接口。請看例子:private clasfListener implements ChatSeListener, MessageListenerpub
11、lic void seChanged(Chat arg0, ChatSe arg1)Public void prosMessage(Chat arg0, Message arg1)MessageListener messageListener = new SelfListener();這樣當會話對方的 ChatSe 發(fā)生改變時,seChanged 方法就被觸發(fā)。實際上是接收到一個內(nèi)容為空的Message,Message 里通知 ChatSe 改變。2.2 消息2.2.1 設(shè)置消息的屬性發(fā)送消息的方法 sendMessage(),它有兩種實現(xiàn)方式,sendMessage(String text)
12、 和sendMessage(Message message)。第一種就是上面例子中所用的,直接以 String 為對象,發(fā)送一個消息。為了滿足用戶自定義需求,Smack 提供了第二種方式,它可以為 message 添加一些附加屬性,在 message 中他們只顯示為 String 字段。在客戶端接收時,可以通過處理來讓這些字段有特定的意義,譬如設(shè)置發(fā)送文字的大小,字體,顏色等。這里需要了解 Message 這個類,它有三種構(gòu)造函數(shù),Message()、Message(String text)和Message(String text, Message.Type type)其中text 是要發(fā)送的
13、內(nèi)容,Message.Type 共有五種,常用的為chat 和 groupchat。Message 中有很多方法,通過這些方法可以設(shè)置或者取得消息的屬性,如 addBody()添加消息內(nèi)容,getBody()獲得消息內(nèi)容,getFrom()獲取消息的發(fā)送者等。Message 還有 API 中沒有提到的方法:setProperty(String name, String value)。通過這個方法己定義的屬性,可參見下面例子:可以設(shè)置很多自Messagemessage=new Message();message.setBody(“This is a Message text”);message.
14、setProperty(“color”,”red”);message.setProperty(“size”, “big”);message.setProperty(“isPictureIn”,”false”);chadMessage(message);這樣就發(fā)送了一個包含一些特定屬性的消息。當用戶收到這樣的消息后,通過調(diào)用 message. getPropertyNames()方法來獲取所有屬性的一個 Collection。再通過 message.getProprety(String name)來獲取名為 name 屬性的值,根據(jù)用戶自己的定義,可以實現(xiàn) API 沒有提供的功能,如改變消息顯示
15、字體顏色。2.2.2 消息狀態(tài)對于發(fā)送出去的消息,有時候需要獲取消息發(fā)送的情況,如是否發(fā)送成功,對方是夠處理等,這些功能需要用到 MessageEventManager,通過調(diào)用 MessageEventManager.addNotificationsRequests(Message message,offline,delivered,,message 為將要發(fā)送的coming)來對消息的狀態(tài)進行標記displayed,消息,剩余四項為可選擇的選項,true 為。當對其中部分選項進行后,下一步操作就是對響應(yīng)結(jié)果進行。比如你想知道自己發(fā)送消息的標記結(jié)果,需要創(chuàng)建一個 MessageEvenetM
16、anager 對象,并調(diào)用方法addMessageEventNotificationListener(MessageEventNotificationListener messageEventNotificat ionListener)。如果你想是否有人給自己發(fā)送消息請求,這時候需要調(diào)用方法addMessageEventRequestListener(MessageEventRequestListener messageEventRequestListener) 。2.2.3 離線消息發(fā)送消息時,用戶不,系統(tǒng)會自動保存這些消息。當用戶登錄后,用戶需要主動去服務(wù)器獲取離線消息。主要用到的接口是
17、OfflineMessageMananger。這里有一個需要注意的地方,那就是用戶 login 時不能發(fā)送 Presence(用戶狀態(tài),這個下章講),否則收不到離線消息。具體可以看下面例子:ConnectionConfiguration connConfig = new ConnectionConfiguration(localhost);connConfig.sedPresence(false);/設(shè)置不發(fā)送PresenceConnection conn2 = new XMPPConnection(connConfig);Conn2.connect();Conn2.login(zhang,
18、111);OfflineMessageManager omm = new OfflineMessageManager(conn2);/創(chuàng)建一個對象Iteratorommlist = omm.getMessages();/獲取消息,結(jié)果為一個Message迭代器omm.deleteMessages();/將服務(wù)器上的離線消息刪除。如果不執(zhí)行最后一步操作的話,下次登錄這些離線消息還在。2.3 文件傳輸用戶可能希望向其它用戶發(fā)送文件。其它用戶有接受,或忽略用戶的請求。Smack為用戶輕松發(fā)送文件提供了一個簡單的接口。暫只實現(xiàn)文件傳輸,沒有實現(xiàn)文件夾傳輸。2.3.1 發(fā)送文件要發(fā)送或接受文件首先必須創(chuàng)
19、建 FileTransferManager 類的一個對象,創(chuàng)建方法是 FileTransferManager(XMPPConnection connection)。假設(shè)現(xiàn)在 livsun 創(chuàng)建了一個文件傳輸管理對象 fileTransferManager = new FileTransferManager(conn);現(xiàn)在需要創(chuàng)建一個輸出的文件傳輸對象來發(fā)送文件。OutgoingFileTransfer outfile = fileTransferManager(UserID),UserID 為完全 ID,如果要發(fā)送文件給 livsun1 的話,這里 UserID 為”livsun1z0018
20、9374/Smack”。通過調(diào)用 sendFile(file, description)來發(fā)送文件,file 是文件對象,description 是對文件的描述,可以在接受時獲取,并提示用戶,可以根據(jù)描述來選擇是否接受。一個完整的發(fā)送文件的過程如下:FileTransferManager fileTransferManager = new FileTransferManager(conn);OutgoingFileTransfer outfile =manager.createOutgoingFileTransfer(livsun1z00189374/Smack );outfile.sendF
21、ile(new File(fileToBeSended.txt), You wont be ve this!);2.3.2 接受文件如果想知道是否有人發(fā)送文件給自己,首先同樣需要創(chuàng)建一個 FileTransferManager 對象,如 FileTransferManagerfileTransferManager1=new FileTransferManager(conn1);然后對該對象一個器 FileTransferListener,來文件傳輸請求。這個器在有文件傳輸時被觸發(fā),它只有一個方法 fileTransferRequest(FileTransferRequest request),
22、這個方法來決定文件時接受還是。如果要接受,只要簡單的 request.reject()就可以了。如果要接受,通過 request.accept()創(chuàng)建一個ingFileTransfer 對象,代碼實現(xiàn):ingFileTransfer infile = request.accept();然后infile 調(diào)用recieveFile(file)來講文件接受到file中。同時還可以對文件傳輸?shù)臓顟B(tài)進行。及接受文件的代碼實現(xiàn):final FileTransferManager fileTransferManager1 = new FileTransferManager(conn);fileTransf
23、erManager1.addFileTransferListener(new FileTransferListener() public void fileTransferRequest(FileTransferRequest request) / 監(jiān)查此請求是否應(yīng)該被接受,shouldAccept 由自己實現(xiàn)if(shouldAccept(request) /接受則接受文件ingFileTransfer infile = request.accept();infile.recieveFile(new File(FILE_PATH+infile.getName(); else request.
24、reject(););2.3.3 文件傳輸狀態(tài)在文件傳輸過程中,發(fā)送FileTransfer 類來實現(xiàn)。接收方需要知道文件傳輸?shù)倪M度和狀態(tài),需要通過ingFileTransfer 和 OutgoingFileTransfer 都繼承了 FileTransfer 類,此類提供一些方法監(jiān)視文件傳輸?shù)倪M展:getSus() - 文件傳輸可以有多種狀態(tài),協(xié)商,取消,傳輸過程中,錯誤和完成。這個方文件傳輸?shù)漠斍盃顟B(tài)。getProgress() - 如果文件在傳輸過程中,這個方返回一個 0 到 1 的數(shù)字,0 表示傳輸還沒開始,1 表示傳輸完成。如果沒在傳輸過程中也可能返回-1。isDone() - 和g
25、etProgress()方法類似,不同的是它返回錯誤或完成返回真,否則返回假。如果狀態(tài)為,取消,getError() - 如果在傳輸過程中發(fā)生錯誤,這個方法將會返回所發(fā)生的錯誤的類型。如在接收方監(jiān)視文件狀態(tài),代碼實現(xiàn)如下:while(!infile.isDone() if(infile.getSus().equals(Sus.ERROR) System.out.prln(ERROR! + transfer.getError(); else System.out.prln(infile.getSus();System.out.prln(infile.getProgress();3.多人聊天Mul
26、tiUserChat,即多人聊天,通過一個用戶創(chuàng)建群組,并邀請其他用戶進入群組,或者其他用戶可以進入群組,并在群組里聊天。功能有創(chuàng)建房間、邀請、邀請或、權(quán)限更改、改變等。3.1 創(chuàng)建多人聊天房間用戶可以創(chuàng)建兩種多人聊天房間:即時房間和生成,但是在所有參與用戶下線后,該房間注銷。創(chuàng)建者是第一個參與者,并且是該房間的 Owner。房間。即時房間按照默認的設(shè)置立馬房間是創(chuàng)建者通過自己的設(shè)置生成,要想創(chuàng)建一個房間,首先需要創(chuàng)建一個 MultiUserChat 的對象 ,MultiUserChat 類的構(gòu)造函數(shù)需要兩個參數(shù),當前用戶的連接和房間的JID。如MultiUserChat chatRoom =
27、 new MultiUserChat(conn, “myGroupconference .z00189374”);通過 chatRoom 調(diào)用 create(“nickname”)來創(chuàng)建房間,其中 nickName 為用戶在房間里顯示的昵稱。為了使房間成為房間并且更加符合用戶的,用戶需要對房間進行一些設(shè)置。第一步是獲取房間的配置表格,代碼為Form form = chatRoom.getConfigurationForm();再根據(jù)配置表格生成一個用來提交配置的表格,代碼為Form submitForm = form.createAnswerForm();在對 submifForm 進行設(shè)置一
28、些屬性,屬性包含但不限于以下幾個:/房間的名稱submitForm.setAnswer(muc#roomconfig_roomname, TestUserNumber);/保證只有的昵稱才能進入房間submitForm.setAnswer(x-muc#roomconfig_nick,true);/設(shè)置為房間submitForm.setAnswer(muc#roomconfig_persistentroom,true);/設(shè)置房間人數(shù)上限,注意,參數(shù)不是!submitForm.setAnswer(muc#roomconfig_maxusers,list);最后通過chatRoom調(diào)用sendCo
29、nfigurationForm(submitForm)來完成對房間的配置。3.2 加入聊天室為了在聊天室里接受或發(fā)送消息,首先需要進入聊天室。進入房間之前,先通過用戶連接和房間 JID 來創(chuàng)建一個 MultiUserChat 的對象。MultiUserChat chatRoom1 = new MultiUserChat(conn1, “myGroup conference .z00189374”);有三種進入房間的方式:一、直接加入不需要的房間 chatRoom1.join(“nickname”);二、加入需要的房間 chatRoom1.join(“nickName”,”password”);
30、三、加入需要的房間,且同時設(shè)置接受的數(shù)目,在一、二中,沒有設(shè)置這項,接受的數(shù)目有服務(wù)器決定。DiscusHistory history = new DiscusHistory();history.setMaxStanzas(5);muc2.join(testbot2,password,history, SmackConfiguration.getPacketReplyTimeout();3.3 群組邀請及群組邀請如果你建了一個群,你可能希望你的某些好友也加入到這個群,你可以通過對他們發(fā)送邀請并結(jié)果來實現(xiàn)這個功能。首先加入一個房間,muc.join(“l(fā)ivsun”),并且確認你有這個房間的邀請
31、資格。然后通過muc 調(diào)用 invite(user,reason)方法,其中 user 是被邀請人的 JID,reason 是邀請原因。為了知道邀請結(jié)果,這里只能獲取對面的結(jié)果,在發(fā)出邀請之前,需要對 multiuserChat 對象一個器 muc.addInviionRejectionListener(new InviionRejectionListener() );為了獲取來自其他人的群組邀請,用戶可以直接通過自己的連接對 MultiUserChat器。如 MultiUserChat.addInviionListener(conn1, new InviionListener() )。一個下
32、面看一個 livsun 對 livsun1 發(fā)起邀請,livsun1對例子:MultiUserChat muc = new MultiUserChat(conn, “ HYPERLINK mailto:maGroupconference.z00189374 maGroupconference.z00189374”);muc.join(livsun);muc.addInviionRejectionListener(new InviionRejectionListener() public void inviionDeclined(String invitee, String reason) /
33、被了);/發(fā)出邀請muc.invite(livsun1z00189374/Smack, For Dota);/下面是 livsun1 的處理MultiUserChat.addInviionListener(conn1, new InviionListener() public void inviionReceived(Connection conn, String room,String reason, String password) String inviter,/ 對請求進行處理,這里是了MultiUserChat.decline(conn, room, inviter, Im work
34、ing delay);/接受并加入/MultiUserChat muc1 = new MultiUserChat(conn, room);/muc1.join(“l(fā)ivsun1”););3.4 在群組中開始一個單人聊天在群組列表中,你可能想對某個人發(fā)起單獨,這時可以使用下面方法實現(xiàn):Chat chat = muc.createPrivateChat(myGroupconference.z00189374/livsun1);chadMessage(o there);不過這樣livsun1 收到的消息并不是來自于livsun,而是來自 HYPERLINK mailto:myGroupconfere
35、nce.z00189374 myGroupconference.z001893743.5 更改房間成員權(quán)限一個典型的群組具有三種的人:創(chuàng)建者、管理員和成員。房間創(chuàng)建者可以改變房間配置、授予用戶所和管理權(quán)限以及毀掉此房間。房間管理員可以或授予用戶權(quán)限和主持者權(quán)限。房間成員僅能允許用戶加入房間。這里用到的方法都是 MultiUserChat 的方法,具體可以去看 Smack 的 API 文檔。還可以對房間其他成員或自己的權(quán)限改變進行,方法分別為addParticipantSusListenarticipantSusListener listener)和addUserSusListener(User
36、SusListener listener)3.6 獲取自己曾經(jīng)加入的房間MultiUserChat 沒有提供方法獲取自己曾經(jīng)加入的房間,它的 getJoinedRooms 只能獲取一個好友當前正在加入的房間。而當一個用戶登陸時,用戶需要獲取自己加入過的房間列表,這里需要用到收藏夾Bookmarks。3.6.1 保存房間信息首先需要創(chuàng)建一個 Bookmarks 的對象,BookeMarks bm = new BookeMarks()。然后創(chuàng)建BookmarkedConference 對象 bmConference 來保存群組信息。通過 bm 調(diào)用 addBookmarkedConference(
37、BookmarkedConference bookmarkedConference)方法,來講一個 BookmarkedConference 對象加入 Bookmarks 中。最后要把 Bookmarks 的信息保存到私人專有數(shù)據(jù)中。先創(chuàng)建 PrivateDataManager 的一個對象 pdmanager,通過 pdmanager 調(diào)用方法 setPrivateData(bm)來將數(shù)據(jù)保存到服務(wù)器。具體代碼實現(xiàn)如下:/創(chuàng)建收藏夾對象Bookmarks bookmarks = new Bookmarks();/創(chuàng)建聊天群組收藏,參數(shù)分別為房間的名字,JID,是否自動進入房間,用戶昵稱,Boo
38、kmarkedConference conference1 = newBookMarkMain(groupName, HYPERLINK mailto:myGroupconference.z00189374 myGroupconference.z00189374,true,nicknam e,null);bookmarks.addBookmarkedConference(conference1);PrivateDataManager manager = new PrivateDataManager(conn);manager.setPrivateData(bookmarks);3.6.2 獲取
39、房間信息當用戶登錄時,用戶去 privateData 獲取自己的房間信息。用戶需要提供 Bookmarks 的方法來正確獲取保存在PrivateData 中的 Bookmarks 信息。具體方法如下Bookmarks bm = new Bookmarks();PrivateDataManager manager = new PrivateDataManager(conn);/提供對Bookmarks的IQ包的方法manager.addPrivateDataProvider(bm.geementName(),bm.getNamespace(), new Bookmarks.Provider();
40、/獲取Bookmarks信息bm = (Bookmarks)manager.getPrivateData(bm.geementName(),bm.getNamespace();/獲取Bookmarks中群組的信息。Collection c = bm.getBookmarkedConferen();4.聯(lián)系人每一個用戶都有一個Roster列表,包含多個RosterEntry。在roster中每個用戶用一個RosterEntry表示,它包括:一個XMPP地址(例如 livsunz00189374)。一個您分配給用戶的昵稱(例如 2b)。登陸所屬的roster組列表。如果roster登陸不屬于任何組
41、,它將被稱為“unfiledentry”。 在openfire中一個RosterEntry可以同時屬于多個分組。4.1 獲取聯(lián)系人當用戶通過接登錄服務(wù)器后,用戶可以從服務(wù)器獲取自己的 Roster 列表。Roster roster = conn.getRoster();獲取 Roster 后可以通過調(diào)用 roster.getEntries()方法來獲取所有 RosterEntry 對象,返回類型為 Collection。Collection rosterentrys = roster.getEntries();如 果 想 獲 得 分 組 信 息 , 需 要 調(diào) 用 roster.getGrou
42、ps(), 返 回 結(jié) 果 是 一 個Collection??梢栽谕ㄟ^ rosterGroup.getEntries()獲取每個分組的成員。對于每個成員的狀態(tài)信息,如是否獲取。,簽名等,可通過 roster.gresence(RosterEntry)4.2 管理好友用戶可能需要添加其他用戶到自己的Roster 中,并可以獲取這些用戶的狀態(tài)更新。Smack使用了一種訂閱的Presence 的方式來獲取狀態(tài),這樣確保用戶隱私,因為只有允許訂閱才能獲取狀態(tài)。對于訂閱請求,用戶有三種處理方式:接受所有、所有和手動處理。這需要通過通過 Roster.setSubscriptionMode(subscri
43、ptionMode)方法來設(shè)置。添加好友就是一個互相發(fā)送狀態(tài)訂閱消息的過程。通過調(diào)用roster.createEntry(JID,nickname,group)來將一個用戶添加到自己的 roster 中,并向這個用戶發(fā)送一個訂閱 presence 的請求。刪除好友只需 roster.removeEntry(RosterEntry)就可以將用戶從自己的 roster 中刪除。如果用戶想把某位好友從一個群組移動到另外一個群組里,需要用到 RosterGroup 的removeEntry()和 addEntry()方法。假設(shè)當前群組名稱為 groupNow,即將移入的群組名稱為 groupTo,則代
44、碼實現(xiàn)如下/假設(shè)被移動的成員為一個 RosterEntry 對象 rosterEntryMoveRosterGroupgourpNow = roster.getGroup(“groupNow”);RosterGroupgourpTo= roster.getGroup(“groupTo”);groupNow.removeEntry(rosterEntryMove);groupTo.addEntry(rosterEntryMove);4.2 狀態(tài)修改Presence 是用來管理用戶的狀態(tài),它有和不兩種狀態(tài)。如果又可以包含很多其他信息,如忙碌、離開等,還可以獲取簽名。用戶可以通過發(fā)送Presence
45、 包來改變自己的狀態(tài)。首先需要創(chuàng)建一個 Presence 對象。Presence presence = new Presence(Presence.type.available);etSus(“吃飯去”);presenpresenetMode(“away”);conn.sendPacket(presence);這里用戶發(fā)送了一個Presence 包,更新自己狀態(tài)為離開,且即時心情為“吃飯去”。.4.3 隱私設(shè)置與的實現(xiàn)Privacy 是管理其他用戶與自己通信的方法。它是由用戶定義,可以獲取、修改或刪除的,保存在服務(wù)器端的隱私設(shè)置。它基于三種不同的范圍 JID、Group 和簽名類型來管理隱私。
46、其中設(shè)置包含消息、上線通知、IQ 包或所有通信。要實現(xiàn)隱私管理首先需要了解他的三個 APIPrivacyListManager: 這是重新獲得并處理服務(wù)器隱私列表的主 API 類。PrivacyList: 代表一個隱私列表,有一個名字,一組隱私項目。例如,可見或不可見列表。PrivacyItem:阻擋或允許隱私的某個方面。例如,允許的朋友看到的出席狀態(tài)。首先要從服務(wù)器上獲取用戶的PrivacyListManagerPrivacyListManaglm = PrivacyListManager.getInstanceFor(conn);再創(chuàng)建一個隱私列表List privacyItems = new ArrayList();然后向這個列表中添加隱私設(shè)置/對其隱身PrivacyItem item = new PrivacyItem(“jid”, false, 1);item.setValue(userJID);item.setFiltresenceout(true);privacyItems.add(item);最后要將這個隱私列表創(chuàng)建到服務(wù)器上,并設(shè)置為激活狀態(tài)。plm.createPrivacyList(“myList”, privacyItems);ptActiveListName(“myList”);實現(xiàn)PrivacyItem item1 = new PrivacyItem(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度鋼管架勞務(wù)分包合同(含新型施工技術(shù))
- 二零二五年度電商大數(shù)據(jù)營銷合同模板3篇
- 2025年度港口碼頭岸電充電樁建設(shè)合同3篇
- 二零二五版農(nóng)場消防設(shè)備定期檢查與維護服務(wù)協(xié)議3篇
- 2025年度環(huán)保型車間租賃及節(jié)能減排合同范本4篇
- 2025年度車輛典當借款逾期處理及追償合同4篇
- 二零二五年度綠色成品油公路運輸管理合同4篇
- 2025年度店鋪經(jīng)營權(quán)轉(zhuǎn)租合同書4篇
- 二零二五版南京琴行教師教學(xué)成果展示與推廣合同3篇
- 2025年度木托盤租賃與供應(yīng)鏈金融創(chuàng)新服務(wù)合同4篇
- 2024年山東省泰安市高考物理一模試卷(含詳細答案解析)
- 護理指南手術(shù)器械臺擺放
- 腫瘤患者管理
- 2025年中國航空部附件維修行業(yè)市場競爭格局、行業(yè)政策及需求規(guī)模預(yù)測報告
- 2025春夏運動戶外行業(yè)趨勢白皮書
- 《法制宣傳之盜竊罪》課件
- 通信工程單位勞動合同
- 2024年醫(yī)療器械經(jīng)營質(zhì)量管理規(guī)范培訓(xùn)課件
- 零部件測繪與 CAD成圖技術(shù)(中職組)沖壓機任務(wù)書
- 2024年計算機二級WPS考試題庫380題(含答案)
- 高低壓配電柜產(chǎn)品營銷計劃書
評論
0/150
提交評論