XMPP的android获取所有联系人,创建会话,发送消息实现

下面就开始获取用户的联系人:当然返回的是一个List,然后显示到ListView上去,这个就不说了,配置一个adapter适配器就好了。

/**
	 * 获得所有的联系人列表
	 * 
	 * @return
	 */
	public static List<User> getNoGroupUserList(Roster roster) {
		List<User> userList = new ArrayList<User>();

		// 服务器的用户信息改变后,不会通知到unfiledEntries
		for (RosterEntry entry : roster.getUnfiledEntries()) {
			userList.add(contacters.get(entry.getUser()).clone());
		}

		return userList;
	}
怎么才能在界面上显示的可以入目一点能,可以使用ExpandableListView,也可以使用类似于查找电话薄中联系人的形式,具体参考这位高手的博文:http://blog.csdn.net/xiaanming/article/details/12684155

这里我就不多说了。

如何创建一个会话呢,我是在listView中添加item的监听事件,然后点击了跳转到回话界面,同时将呼呼信息传递到回话页面,思考一下,怎么才能让创建的回话唯一呢,

我是使用了一个判断,就是判断当前聊天的用户(我们跳转的时候,当然可以获取目前聊天的用户,然后发来消息的用户也能获取),然后对比发来消息的用户,一一致的话

就直接将消息显示在界面上。不是就存入数据库。我只是讲一下思路。

接下来就是发送消息了:

ChatManager chatmanager = XmppConnectionManager.getInstance().getConnection()
				.getChatManager();
Chat newChat = chatmanager.createChat(user, null);<span style="white-space:pre">	</span>//user是聊天对象
try {
	newChat.sendMessage(message.getText().toString());}catch (XMPPException e)
{
<span style="white-space:pre">	</span>e.printStackTrace();
	}
这样就实现了消息的发送,你可以试试看

然后就是监听消息:

ChatManager chatmanager =  XmppConnectionManager.getInstance().getConnection().getChatManager();
		chatmanager.addChatListener(new ChatManagerListener() {
			
			@Override
			public void chatCreated(Chat arg0, boolean arg1) {
				// TODO Auto-generated method stub
				arg0.addMessageListener(new MessageListener() {
					
					@Override
					public void processMessage(Chat arg0, Message arg1) {
						// TODO Auto-generated method stub
						String result = "" + message.getBody();<span style="white-space:pre">	</span>//这里就获取到了消息的内容,怎么更新随便的,Handler可以,由广播来实现也可以,我是用广播实现的。
<span style="white-space:pre">						</span>String ss = message.getFrom();
<span style="white-space:pre">						</span>System.out.println("user" + ss);
					}
				});
			}
		});
发送文件(图片语音都可以文件形式发送):

			FileTransferManager fileTransferManager2 = new FileTransferManager(
					XmppConnectionManager.getInstance().getConnection());
			OutgoingFileTransfer outgoingFileTransfer1 = fileTransferManager2
					.createOutgoingFileTransfer(user + "/Spark");//这里为什么要发送两次呢,一个是发给spark,电脑端的,下面是发给客户端
			OutgoingFileTransfer outgoingFileTransfer3 = fileTransferManager2
					.createOutgoingFileTransfer(user + "/Smack");
			System.out.println("user" + user1);
			File insfile = new File(cursor.getString(1));//这里参数传入文件路径即可,因为上面代码未贴出,所以这个路径是没什么用的
			try {
				try {
					outgoingFileTransfer1.sendFile(insfile, insfile.getName());
				} catch (XMPPException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				outgoingFileTransfer3.sendFile(insfile, insfile.getName());
			} catch (XMPPException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
然后就是文件监听

		FileTransferManager fileTransferManager = new FileTransferManager( XmppConnectionManager.getInstance().getConnection());
		fileTransferManager.addFileTransferListener(new FileTransferListener() {
			
			@Override
			public void fileTransferRequest(FileTransferRequest arg0) {
				// TODO Auto-generated method stub
				try {
					File insFile = new File(
							Environment.getExternalStorageDirectory() + "/DCIM/"
									+ arg0.getFileName());
					IncomingFileTransfer infiletransfer = arg0.accept();
					infiletransfer.recieveFile(insFile);
//					insFile.getAbsolutePath()   接收的文件存储的路径
					
					System.out.println("格式"+arg0.getRequestor());<span style="white-space:pre">	</span>//这是发送人
这节就到这里,下一节可以讲下离线消息的接收了。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值