android IM的實現:聊天室(採用smack API)

由於Smack的API版本不一樣吧,以爲會有個對應的GroupChat來處理聊天室(跟Chat處理普通聊天一樣).可我錯了,我沒有找到這個類

翻了下API,最後發現只有採用MultiUserChat

獲取服務器端聊天室信息:

public static void getConferenceRoom() throws XMPPException {
		if (!MultiUserChat.getHostedRooms(mAdaptee, "127.0.0.1").isEmpty()) {
			for (HostedRoom k : MultiUserChat.getHostedRooms(mAdaptee,
					"127.0.0.1")) {
				for (HostedRoom j : MultiUserChat.getHostedRooms(mAdaptee,
						k.getJid())) {
					RoomInfo info2 = MultiUserChat.getRoomInfo(mAdaptee,
							j.getJid());
					if (j.getJid().indexOf("@") > 0) {
						System.out.println("聊天室的名稱是: " + j.getName()
								+ "\n JID是:" + j.getJid());
						System.out.println("aaNumber of occupants:"
								+ info2.getOccupantsCount());
						System.out
								.println("聊天室的描述:" + info2.getDescription());
						System.out.println("聊天室的主題:" + info2.getSubject());
						System.out.println("聊天室的JID:" + info2.getRoom());
					}
					
				}
			}
		}
		
	}

加入聊天室,獲取聊天室的人數,監聽消息的發送與接收,監聽聊天室的動態:

public static void joinRoom() throws XMPPException{
		MultiUserChat multiUserChat = new MultiUserChat(mAdaptee, "[email protected]");
		multiUserChat.join("NiMei", "");
		multiUserChat.sendMessage("send message successful");// 發送消息
		
		System.out.println(multiUserChat.getOccupantsCount());// 聊天室人數
		
		Iterator<String> it = multiUserChat.getOccupants();
		while(it.hasNext()){
			// [email protected]/sushuo1
			// [email protected]/guohai
			System.out.println(StringUtils.parseResource(it.next()));// 聊天室成員名字
		}
		
		multiUserChat.addMessageListener(new PacketListener() {
			@Override
			public void processPacket(Packet packet) {
				Message message = (Message)packet;
				//接收來自聊天室的聊天信息
				System.out.println("收到聊天室消息=>" + StringUtils.parseResource(message.getFrom()) + ": "+message.getBody());
			}
		});
		
		multiUserChat.addParticipantStatusListener(new ParticipantStatusListener() {
			
			@Override
			public void voiceRevoked(String participant) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void voiceGranted(String participant) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void ownershipRevoked(String participant) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void ownershipGranted(String participant) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void nicknameChanged(String participant, String newNickname) {
				// TODO Auto-generated method stub
				System.out.println(StringUtils.parseResource(participant) + " is now known as "+ newNickname +".");
			}
			
			@Override
			public void moderatorRevoked(String participant) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void moderatorGranted(String participant) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void membershipRevoked(String participant) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void membershipGranted(String participant) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void left(String participant) {
				// TODO Auto-generated method stub
				System.out.println(StringUtils.parseResource(participant) + " has left the room.");
			}
			
			@Override
			public void kicked(String participant, String actor, String reason) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void joined(String participant) {
				// TODO Auto-generated method stub
				System.out.println(StringUtils.parseResource(participant) + " has joined the room.");
			}
			
			@Override
			public void banned(String participant, String actor, String reason) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void adminRevoked(String participant) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void adminGranted(String participant) {
				// TODO Auto-generated method stub
				
			}
		});
		
	}

監聽好友發送來的加入聊天室的邀請:

MultiUserChat.addInvitationListener(mAdaptee, new InvitationListener() {
			
			@Override
			public void invitationReceived(org.jivesoftware.smack.Connection conn, String room,
					String inviter, String reason, String password, Message message) {
				MultiUserChat multiUserChat = new MultiUserChat(conn, room);
				System.out.println("收到來自 "+inviter+" 的聊天室邀請。邀請附帶內容:"+reason);
				try {
					multiUserChat.join("HMM", password);
				} catch (XMPPException e) {
					System.out.println("加入聊天室失敗");
					e.printStackTrace();
				}
				System.out.println("成功加入聊天室");
				multiUserChat.addMessageListener(new PacketListener() {
					@Override
					public void processPacket(Packet packet) {
						Message message = (Message)packet;
						//接收來自聊天室的聊天信息
						System.out.println(message.getFrom() + ":" + message.getBody());
					}
				});
			}
		});



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章