基于asmack开发的Android开源IM客户端
2014-08-06 13:48
344 查看
在上两篇文章中,我们依次介绍openfire部署以及smack常用API的使用,这一节中我们着力介绍如何基于asmack开发一个Android的客户端,本篇的重点在实践,讲解和原理环节,大家可以参考前两篇的文章
基于xmpp
openfire smack开发之openfire介绍和部署[1]
基于xmpp
openfire smack开发之smack类库介绍和使用[2]
1.源码结构介绍
activity包下存放一些android页面交互相关的控制程序,还有一个些公共帮助类
db包为sqlite的工具类封装,这里做了一些自定义的改造,稍微仿Spring的JdbcTemplate结构,使用起来更加方便一点
manager包留下主要是一些管理组件,包括联系人管理,消息管理,提醒管理,离线消息管理,用户管理,xmpp连接管理
model包中都是一些对象模型,传输介质
service中存放一些android后台的核心服务,主要包括聊天服务,联系人服务,系统消息服务,重连接服务
task包中存放一些耗时的异步操作
util中存放一些常用的工具类
view中一些和android的UI相关的显示控件
anim中存放一些动画元素的配置
layout是布局页面
menu是地步菜单布局页面
values中存放一些字符,颜色,样式,参数的配置信息
其中strings.xml中,保存的缺省配置为gtalk的服务器信息,大家如果有谷歌gtalk的账号可以直接登录,否则需要更改这里的配置才可以使用其他的xmpp服务器
<!-- 缺省的服务器配置 -->
<integer name="xmpp_port">5222</integer>
<string name="xmpp_host">talk.google.com</string>
<string name="xmpp_service_name">gmail.com</string>
<bool name="is_remember">true</bool>
<bool name="is_autologin">false</bool>
<bool name="is_novisible">false</bool>
复制代码
AndroidManifest.xml为android功能清单的配置文件,我们这里开放的权限并不多
<!-- 访问Internet -->
<uses-permission android:name="android.permission.INTERNET" />
<!--- 访问网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<span style="WHITE-SPACE: pre"> </span><!-- 在SDCard中创建与删除文件权限 -->
<span style="WHITE-SPACE: pre"> </span><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<span style="WHITE-SPACE: pre"> </span><!-- 往SDCard写入数据权限 -->
<span style="WHITE-SPACE: pre"> </span><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
复制代码
2.核心类介绍
1.ActivitySupport类
大家写android程序会发现,不同的activity之间经常需要调用一些公共的资源,这里的资源不仅包括android自身的,还有我们自己的管理服务类,甚至相互之间传递一些参数,这里我仿照struts2的设计,提炼出一个ActivitySupport类,同时抽取一个接口,让所有的Activity都集成这个类,因为有了接口,我们便可以采用回调模式,非常方便的传递数据和使用公共的资源,这种好处相信大家使用之后都能有深刻的体会,通过接口回调传递参数和相互调用的方式无疑是最优雅的,spring和hibernate源码中曾经大量使用这种结构。
2.SQLiteTemplate类
我们希望在android操作数据库是优雅的一种方式,这里不必关注事务,也不用担心分页,更不用为了封装传递对象烦恼,总之一切就像面向对象那样,简单,模板类的出现正是解决这个问题,虽然它看上去可能不是那么完美有待提高,这里我封装了很多sqlite常用的工具,大家可以借鉴使用。
3.XmppConnectionManager管理类
这个类是xmpp连接的管理类,如果大家使用smack的api对这个应该不会陌生,asmack对xmpp连接的管理,与smack的差别不大,但是部分细微区别也有,我们在使用中如果遇到问题,还要多加注意,我们这里将其设计成单例,毕竟重复创建连接是个非常消耗的过程。
3.演示效果
已实现的功能:
1.聊天
2.离线消息
3.添加,删除好友
4.添加,移动好友分组
5.设置昵称
6.监控好友状态
7.网络断开系统自动重连接
8.收到添加好友请求消息处理
9.收到系统广播消息处理
10.查看历史聊天记录
11.消息弹出提醒,和小气泡
....
因为时间关系不是很完美,主要用于学习研究,欢迎大家给我提bug和改进意见。
转载标注出处 请尊重作者原创
如有更好的改进,可以向我提交代码
源码回复下载
EIM下载地址.zip (349
Bytes, 下载次数: 1209)
参阅文献
Openfirehttp://www.igniterealtime.org/
push-notificationhttp://www.push-notification.org/
Claros chathttp://www.claros.org/
androidpnsourceforgehttp://sourceforge.net/projects/androidpn/
android消息推送解决方案http://www.cnblogs.com/hanyonglu/archive/2012/03/04/2378971.html
xmpp协议实现原理介绍 http://www.cnblogs.com/hanyonglu/archive/2012/03/04/2378956.html
基于xmpp
openfire smack开发之openfire介绍和部署[1]
基于xmpp
openfire smack开发之smack类库介绍和使用[2]
1.源码结构介绍
activity包下存放一些android页面交互相关的控制程序,还有一个些公共帮助类
db包为sqlite的工具类封装,这里做了一些自定义的改造,稍微仿Spring的JdbcTemplate结构,使用起来更加方便一点
manager包留下主要是一些管理组件,包括联系人管理,消息管理,提醒管理,离线消息管理,用户管理,xmpp连接管理
model包中都是一些对象模型,传输介质
service中存放一些android后台的核心服务,主要包括聊天服务,联系人服务,系统消息服务,重连接服务
task包中存放一些耗时的异步操作
util中存放一些常用的工具类
view中一些和android的UI相关的显示控件
anim中存放一些动画元素的配置
layout是布局页面
menu是地步菜单布局页面
values中存放一些字符,颜色,样式,参数的配置信息
其中strings.xml中,保存的缺省配置为gtalk的服务器信息,大家如果有谷歌gtalk的账号可以直接登录,否则需要更改这里的配置才可以使用其他的xmpp服务器
<!-- 缺省的服务器配置 -->
<integer name="xmpp_port">5222</integer>
<string name="xmpp_host">talk.google.com</string>
<string name="xmpp_service_name">gmail.com</string>
<bool name="is_remember">true</bool>
<bool name="is_autologin">false</bool>
<bool name="is_novisible">false</bool>
复制代码
AndroidManifest.xml为android功能清单的配置文件,我们这里开放的权限并不多
<!-- 访问Internet -->
<uses-permission android:name="android.permission.INTERNET" />
<!--- 访问网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<span style="WHITE-SPACE: pre"> </span><!-- 在SDCard中创建与删除文件权限 -->
<span style="WHITE-SPACE: pre"> </span><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<span style="WHITE-SPACE: pre"> </span><!-- 往SDCard写入数据权限 -->
<span style="WHITE-SPACE: pre"> </span><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
复制代码
2.核心类介绍
1.ActivitySupport类
大家写android程序会发现,不同的activity之间经常需要调用一些公共的资源,这里的资源不仅包括android自身的,还有我们自己的管理服务类,甚至相互之间传递一些参数,这里我仿照struts2的设计,提炼出一个ActivitySupport类,同时抽取一个接口,让所有的Activity都集成这个类,因为有了接口,我们便可以采用回调模式,非常方便的传递数据和使用公共的资源,这种好处相信大家使用之后都能有深刻的体会,通过接口回调传递参数和相互调用的方式无疑是最优雅的,spring和hibernate源码中曾经大量使用这种结构。
2.SQLiteTemplate类
我们希望在android操作数据库是优雅的一种方式,这里不必关注事务,也不用担心分页,更不用为了封装传递对象烦恼,总之一切就像面向对象那样,简单,模板类的出现正是解决这个问题,虽然它看上去可能不是那么完美有待提高,这里我封装了很多sqlite常用的工具,大家可以借鉴使用。
3.XmppConnectionManager管理类
这个类是xmpp连接的管理类,如果大家使用smack的api对这个应该不会陌生,asmack对xmpp连接的管理,与smack的差别不大,但是部分细微区别也有,我们在使用中如果遇到问题,还要多加注意,我们这里将其设计成单例,毕竟重复创建连接是个非常消耗的过程。
3.演示效果
已实现的功能:
1.聊天
2.离线消息
3.添加,删除好友
4.添加,移动好友分组
5.设置昵称
6.监控好友状态
7.网络断开系统自动重连接
8.收到添加好友请求消息处理
9.收到系统广播消息处理
10.查看历史聊天记录
11.消息弹出提醒,和小气泡
....
因为时间关系不是很完美,主要用于学习研究,欢迎大家给我提bug和改进意见。
转载标注出处 请尊重作者原创
如有更好的改进,可以向我提交代码
源码回复下载
EIM下载地址.zip (349
Bytes, 下载次数: 1209)
参阅文献
Openfirehttp://www.igniterealtime.org/
push-notificationhttp://www.push-notification.org/
Claros chathttp://www.claros.org/
androidpnsourceforgehttp://sourceforge.net/projects/androidpn/
android消息推送解决方案http://www.cnblogs.com/hanyonglu/archive/2012/03/04/2378971.html
xmpp协议实现原理介绍 http://www.cnblogs.com/hanyonglu/archive/2012/03/04/2378956.html
相关文章推荐
- Android基于XMPP Smack Openfire开发IM【三】客户端接收服务器发送的消息
- Android客户端基于XMPP的IM(openfire+asmack)的聊天工具之环境搭建及与服务器建立连接(一)
- Android客户端基于XMPP的IM(openfire+asmack)的聊天工具之注册(二)
- Android基于XMPP Smack Openfire开发IM【三】客户端接收服务器发送的消息
- Android基于XMPP Smack Openfire开发IM【四】初步实现两个客户端通信
- 用VC写的一个IM客户端,基于一个开源的gloox库开发
- Android基于XMPP Smack Openfire开发IM 【二】获取好友列表
- Android基于XMPP Smack Openfire开发IM(3)建立好友列表
- 基于cling2.0的Android DLNA/Upnp客户端基本开发成功
- 基于Android的小巫新闻客户端开发---显示新闻详细内容业务逻辑实现
- 基于Android客户端的人人网开放平台开发系列教程 (有源码哦)
- 基于Android小巫新闻客户端开发---显示新闻详细内容UI设计
- 基于Android客户端的人人网开放平台开发系列教程
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- Android基于XMPP Smack Openfire开发IM(1)搭建openfire服务器
- Android基于XMPP Smack Openfire下学习开发IM(三)会议室创建、加入以及查询会议室中所有成员等
- Android基于XMPP Smack Openfire开发IM(2)登录openfire
- 基于Android平台淘宝网手机客户端实战开发(共四季,涉及各类技术应用)
- Android基于XMPP Smack Openfire开发IM(1)搭建openfire服务器
- 基于Apache mina开发的windows客户端和android客户端