即时通讯系列阅读
1. 项目简介
做一个类似QQ 的通讯工具,要求有注册、登录、添加好友、添加分组、聊天、退出登录等功能。我用8 张运行效果图来展示我们将要实现的功能。
注意,服务器用的是Openfire,我们可以用Spark 作为另外一个客户端进行测试。
闪屏页进来以后是登录界面,要求记住上次登陆的账号和密码,在界面的右下角有新用户按钮,点击后进入注册界面。注册只需要输入账号和密码即可。账号不能和其他人重复,否则注册不成功。
主界面是一个Activity 绑定3 个Fragment 实现,分别是消息、联系人、动态。
其中消息界面是一个ListView 展出了最近的联系人。点击其中的一个条目可以进入聊天界面。
联系人界面主要是一个ExpandableListView。ExpandableListView 列出了用户组,以及各个组中的好友。点击任意好友可以进入聊天界面。在ExpandableListView 上面有两个图标,分别是新朋友、新群组。点击新朋友弹出一个自定义对话框,在该对话框中输入对方好友的名称,等待对方同意了即可添加为好友。
点击新群组也弹出一个自定义对话框,在该对话框中输入分组名称,则可以创建一个分组。
如果好友不存则添加好友失败,如果分组不存在则创建分组失败。
动态界面主要展示了当前用户的信息,最下面有个退出按钮,点击后退出当前登录,并跳转到登录界面。
聊天界面是一个ListView,该ListView 的条目有两类布局,分别用来表示好友的消息和自己的消息。在最下方的输入框输入文本内容,然后点击发送可以将该消息发送给好友。好友有消息过来也可以直接显示在该界面。
2. 项目搭建
1、下载asmak.jar,是个德国网站
asmack 的版本号从0.x 到现在的4.x 变化比较大。不通过版本差异也比较大。本次我写项目用的是0.8.x 的。
用的是13 年的版本。因为该api 在网上能查到的资料比较多。如果是下一次我再写这个项目我就决定用15 年发布的最新版本的了。
我想看看asmack 公司官网,吧asmack 去掉,想着就是贵公司的网址呢,却得到这样的界面。
2、给工程添加jar
简单极了,只需把下载好的jar 包添加到Android 工程的libs 目录下即可。注意如果eclipse 没有自动将该包添加到环境变量中,我们需要手动添加一下。
3、项目目录结构图
3. 项目实现
3.1 Spark 客户端的下载和安装闪屏界面
新颖的闪屏界面,马老师,学习的目的,我借来用一用哈希望您不用太在意。
我要做的效果是闪屏等待3 秒,然后进入主界面。但是每次都让用户等待3 秒,对于急性子来讲估计会很抓
狂。那怎么办呢,只要是这个界面用户触摸屏幕则立即进入主界面。布局太简单了,不给了。直接给代码。
|
|
3.2 登录
登录界面布局很简单。如果写不出来就没必要往下看了。登录的核心代码:
mXmppConnection.login(name, pwd);
activity_login.xml
LoginActivity 和RegistActivity 都继承自BaseActivity。因此这里先把BaseActivity 的代码列出。
BaseActivity.java
LoginActivity.java
|
|
在上面的代码中我们将登陆成功后获取的connection 对象设置到了Application 中,这里用到了自定义的
Application,并且在清单文件中已经配置。
QQApplication.java
|
|
AndroidManifest.xml
清单文件中高亮显示的两个部分,因为需要连接服务器,因此需要联网权限。
3.3 注册
注册功能核心代码:
activity_regist.xml
RegistActivity.java
3.4 主界面
登录之后就进入主界面了。
activity_main.xml
MainActivity.java
3.5 退出登录
退出登录的功能是在动态中实现的。消息、联系人、动态都是Fragment 实现的。核心代码:
3.6 获取联系人功能
联系人界面对应的是ContactFragment,这个界面包含了获取联系人,添加新朋友,添加新组群等三个功能。
我先将上面三个功能的核心代码列出来,然后在把ContactFragment.java 代码给列出出来。
获取到分组,然后每个分组里面有联系人。界面用的是一个ExpendableListView。
获取联系人核心代码:
添加新朋友核心代码:
|
|
添加新群组核心代码:
联系人布局ragment_contact.xml
联系人代码ContactFragment.java
3.7 聊天功能
聊天界面是一个ListView,这个ListView 有两个布局一个是我发送的消息,另外一个是好友发送的消息。
聊天功能核心代码:
activity_chat.xml
list_item_chat_me.xml
该布局是ListView 中“自己”发送消息时使用的布局。
|
|
list_item_chat_you.xml
ChatActivity.java
3.8 消息界面
SessionFragment 布局就是一个ListView 十分的简单,因此就不给出了。
SessionFragment.java
3.9 启动服务监听消息
当用户登录成功的时候在后台开启一个服务,用于监听主动发过来的消息。
ChatService.java