openfire学习4------->android客户端聊天开发之聊天功能开发
前面我们已经把服务器搭建完成,并且在客户端实现了登录了。
和我们使用的QQ一样,想一想,登录成功之后呢?肯定是要有一个好友列表,通过这个列表,我们可以选择我们需要聊天的好友。
这里我们先研究下 xmpp的数据格式,再去实现我们的好友列表
登录成功后,我们拿到的是一个连接 connection。
然后,通过这个connection,我们可以去获取里面的角色:Roster roster = connection.getRoster();
这里我们拿到了一个Rosrer对象,再通过这个对象,我们可以拿到所有的群组 Collection<RosterGroup> entriesGroup = roster.getGroups();
再遍历一下所有的组,便拿到了每个组对应的用户了哦
public void getUsers(){
System.out.println("======开始获取组及用户==========");
Roster roster = connection.getRoster();
entriesGroup = roster.getGroups();
System.out.println("组的个数:"+entriesGroup.size());
for(RosterGroup group: entriesGroup){
Collection<RosterEntry> entries = group.getEntries();
System.out.println("=========groupName==="+group.getName());
for (RosterEntry entry : entries) {
Log.i("TAG", "name: "+entry.getName());
System.out.println("组成员名字:"+entry.getName());
}
}
System.out.println("======结束获取组及用户==========");
}
这个就是打印所有组成员的名字的一个方法,当然我们肯定需要将它放到一个listview中去,方便我们点击后进行聊天
我就采取最笨的办法了,将所有用户遍历出来,放到一个listview中去
ArrayList<RosterEntry> list;
for(RosterGroup group: LoginActivity.entriesGroup){
entries = (Collection<RosterEntry>) group.getEntries();
for (RosterEntry entry : entries) {
Log.i("TAG", "name: "+entry.getName());
System.out.println("组成员名字:"+entry.getName());
list.add(entry);
}
}
用一个listview把list中的所有成员显示出来,这就不写了,我只图快,写的的确也不咋的,相信大家都写的比我的好
到这里,我们的listview就有了,贴一张我到这步的效果图,大家莫要见笑。
我登录的是test1,其中已经添加过两个好友 admin test2
这里只是显示了用户名,其他信息都是本地先写死的,不是用获取到的来显示的。我们用admin去登录下spark,在里面我们可以看到,test1已经处于在线状态了:
给listview添加一个点击事件,正常我们选择一个联系人,来和他聊天
聊天界面自己倒腾哦,我这就不贴上来了,比较丑(就是下面放了个edittext 和一个button,可以填入消息,点击按钮发送出去)
我们先做发送消息功能:
我们上面拿到的对象中,我们想在connection中肯定会有一个和聊天有关的,打开看一下果然;ChatManager cm = LoginActivity.connection.getChatManager();
按钮点击事件这块的代码我粘贴上来
public void onClick(View arg0) {
EditText input=(EditText) findViewById(R.id.chat_input);
String content=input.getText().toString();
try {
ChatManager cm = LoginActivity.connection.getChatManager();
Message m=new Message();
m.setBody(content);
chat.sendMessage(m);
} catch (XMPPException e) {
e.printStackTrace();
}
}
xmpp是通过对象来传输的,这里面的对象自己考虑下是什么意思吧。
至于里面的account啊什么的一些信息,从上个listview点击跳转的时候使用intent带过来(注:那些信息都在之前得到的 RosterEntry对象中)
到这里发一个消息给桌面版的spark看下吧:
看看spark是否收到
最下面是有的哦,前面的是我之前的测试消息,忽略掉啦。
到这里发送消息就完成了。
下面我们考虑下接收消息:
接收消息我们不一定是在那个用户的聊天页面中才会显示,也可能在好友页面,突然一个朋友来消息了,甚至按下menu退出了,又或者...情况太多了,当然,需要满足这样的条件,我们实现思路肯定是用一个service去接收消息,收到消息后用广播广播出去啦。
下面我们就实现一下接收消息,至于要怎么广播,自己想啦,依需求而定哦
Chat chat=cm.createChat(account, new MessageListener(){
public void processMessage(Chat arg0, Message msg) {
Log.i("---", msg.getFrom()+"说:"+msg.getBody());
//添加消息到聊天窗口
}
});
添加这个监听器就哦了哦,我是直接添加到聊天中去了,其他的不管啦,反正公司现在也不打算用这个的,哈哈哈:
我使用最简单的方法实现发送和接收消息:
send_btn.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {
EditText input=(EditText) findViewById(R.id.chat_input);
String content=input.getText().toString();
try {
ChatManager cm = LoginActivity.connection.getChatManager();
Chat chat=cm.createChat(account, new MessageListener(){
public void processMessage(Chat arg0, Message msg) {
Log.i("---", msg.getFrom()+"说:"+msg.getBody());
//添加消息到聊天窗口
}
});
Message m=new Message();
m.setBody(content);
chat.sendMessage(m);
} catch (XMPPException e) {
e.printStackTrace();
}
}
});
代码比较乱见谅了:用spark发送消息后,控制台打印:07-16 14:42:07.472: I/---(21065): admin@im.comit.com.cn/Spark 2.6.3说:ddd
就不贴图了
这就大致完成功能了,当然离做成项目还有一些距离,希望能帮到需要用到这个做聊天的,或者是希望学习这个的朋友
openfire学习4------->android客户端聊天开发之聊天功能开发的更多相关文章
- Mina框架的学习笔记——Android客户端的实现
Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络 ...
- [5] 微信公众号开发 - 微信支付功能开发(网页JSAPI调用)
1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按 ...
- Android开发 Camera2开发_1_拍照功能开发
介绍 google已经在Android5.1之后取消了对Camera1的更新,转而提供了功能更加强大的Camera2.虽然新版本依然可以使用Camera1但是,不管是各种机型适配还是拍照参数自定义都是 ...
- JFinal极速开发实战-业务功能开发-通用表单验证器
提交表单数据时,需要经过前端的验证才能提交到后台,而后台的验证器再做一道数据的校验,成功之后才能进入action进行业务数据的处理. 在表单数据的验证中,数据类型的验证还是比较固定的.首先是对录入数据 ...
- React开发实时聊天招聘工具 -第一章
第一章 课程道学 6个页面 弱化css Antd-mobile作为组件库 Redux 状态管理 React-Router 路由 Axios异步请求 后端Express框架 Socket.io 数据库: ...
- 仿天猫淘宝的ShopNC好商城原生Android 客户端源码项目
开发环境:Android Studio 2.0 | Gradle 2.0.0最后更新:2016-04-28 简介:基于好商城V4的Android客户端 目前已完成的功能(概述): 1.启动页 -> ...
- Android基于XMPP Smack openfire 开发的聊天室
Android基于XMPP Smack openfire 开发的聊天室(一)[会议服务.聊天室列表.加入] http://blog.csdn.net/lnb333666/article/details ...
- Android:日常学习笔记(8)———开发微信聊天界面
Android:日常学习笔记(8)———开发微信聊天界面 只做Nine-Patch图片 Nine-Patch是一种被特殊处理过的PNG图片,能够指定哪些区域可以被拉升,哪些区域不可以.
- Android基于XMPP Smack及Openfire学习笔记(1)
之前开发的项目中实用到IM聊天功能.可是这块功能公司有专门的IM团队来开发,由他们开发好后.直接接入到我们APP中.我參与写IM相关功能非常地少,所以也一直想学习相关知识 . 眼下Android主要用 ...
- 【原创】轻量级即时通讯技术MobileIMSDK:Android客户端开发指南
申明:MobileIMSDK 目前为个人维护的原创开源工程,现陆续整理了一些资料,希望对需要的人有用.如需与作者交流,见文章底签名处,互相学习. MobileIMSDK开源工程的代码托管地址请进入 G ...
随机推荐
- vs2010断点使用技巧
msdn:http://msdn.microsoft.com/zh-cn/library/vstudio/5557y8b4.aspx 有很多断点的文章. 为提供更大的灵活性,Visual Studio ...
- CMAKE的使用
CMAKE的使用 Version 1.0 2009-3-18 一. 基本使用 安装:下载二进制包后可直接解压使用 从源码安装则执行命令:./bootstrap; make; make ins ...
- Acitivity创建与配置
•Activity的创建和配置 –Activity提供了和用户交互的可视化界面.创建一个Activity一般是继承Activity(当然也可以继承ListActivity.MapActivity等), ...
- 交换机Trunk端口配置
本文为转发,简单明了,我喜欢. Trunk端口的配置步骤如下: 一 组网需求: 1.SwitchA与SwitchB用trunk互连,相同VLAN的PC之间可以互访,不同VLAN的PC之间禁止互访: 2 ...
- Python之路day4
坚持就是胜利.今天零下14度,从教室出来的路上真的很冷很冷,希望这个冬天自己不会白过,春暖花开的时候一定要给世界一个更好的自己. 原本以为day3的作业自己做得挺好的,没想到只得了B+.必须要加油了, ...
- 10-IOSCore - 应用间通信、本地通知
一.应用间通信 URL 调用系统服务: tel:11111 sms:xxx@163.com http:// URL深入 类型://主机:端口/地址?参数 label框等于文字大小快捷键:command ...
- leetcode 编辑距离
class Solution { public: int minDistance(string word1, string word2) { // Start typing your C/C++ so ...
- Collections在sort()简单分析法源
Collections的sort方法代码: public static <T> void sort(List<T> list, Comparator<? super T& ...
- 梳理一下uboot是如何从nandflash挂载文件系统的
只是找到了比较一点点的线索, 如下: 首先要有的概念是,内核在挂载文件系统之前,自己会做一个虚拟fs. 1. Uboot:从flash启动set bootcmd nand read 0x3000000 ...
- WCF技术剖析之十二:数据契约(Data Contract)和数据契约序列化器(DataContractSerializer)
原文:WCF技术剖析之十二:数据契约(Data Contract)和数据契约序列化器(DataContractSerializer) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济 ...