基于asmack开发的Android开源IM客户端

来源:互联网 发布:移动4g网络制式 编辑:程序博客网 时间:2024/06/05 19:08
在上两篇文章中,我们依次介绍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服务器
  1.   <!-- 缺省的服务器配置 --> 
  2.     <integer name="xmpp_port">5222</integer> 
  3.     <string name="xmpp_host">talk.google.com</string> 
  4.     <string name="xmpp_service_name">gmail.com</string>
  5.     <bool name="is_remember">true</bool>
  6.     <bool name="is_autologin">false</bool>
  7.     <bool name="is_novisible">false</bool>
复制代码
AndroidManifest.xml为android功能清单的配置文件,我们这里开放的权限并不多
  1.          <!-- 访问Internet -->
  2.         <uses-permission android:name="android.permission.INTERNET" />
  3.         <!--- 访问网络状态 -->
  4.          <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  5.          <!-- 往SDCard写入数据权限 -->
  6.          <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  7.     <span style="WHITE-SPACE: pre">        </span><!-- 在SDCard中创建与删除文件权限 -->
  8.     <span style="WHITE-SPACE: pre">        </span><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
  9.     <span style="WHITE-SPACE: pre">        </span><!-- 往SDCard写入数据权限 -->
  10.     <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
0 0
原创粉丝点击