一:前面两篇说了Openfire服务器的搭建和注册登录,接下来就是重点了,实现与好友之间的聊天。

二:获取用户的所有好友

XMPPTCPConnection connection

    /*** 获得所有联系人*/public Roster getContact() {Roster roster = Roster.getInstanceFor(connection);//获得所有的联系人组Collection<RosterGroup> groups = roster.getGroups();for (RosterGroup group : groups) {//获得每个组下面的好友List<RosterEntry> entries = group.getEntries();for (RosterEntry entry : entries) {//获得好友基本信息entry.getUser();entry.getName();entry.getType();entry.getStatus();}}return roster;}

三:由于Smack没有提供获取历史聊天记录的Api(本人一直没有找到)所以对于聊天记录、聊天列表这一块需要自己设计数据库用来保存聊天信息;我这里就对一些重点的Api方法进行整理。

  1. 用户一上线获取离线消息,注意:要获取离线消息需要在获取XMPPTCPConnection时将登录状态设置为离线不然获取不到
XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()//....//设置登录状态.setSendPresence(false)//....XMPPTCPConnection  connection = new XMPPTCPConnection(config);
  1. 获取离线消息
    /*** 一上线获取离线消息* 设置登录状态为在线*/private void getOfflineMessage() {OfflineMessageManager offlineManager = new OfflineMessageManager(connection);try {List<Message> list = offlineManager.getMessages();//删除离线消息offlineManager.deleteMessages();//将状态设置成在线Presence presence = new Presence(Presence.Type.available);connection.sendStanza(presence);} catch (Exception e) {e.printStackTrace();}}

四:发送一条消息,可以使用之前安装的Spark进行测试了

 try {ChatManager manager =  ChatManager.getInstanceFor(connection);Chat chat =  manager.createChat("azhon@10.104.179.23",null);chat.sendMessage("HelloWord");} catch (SmackException.NotConnectedException e) {e.printStackTrace();}

manager.createChat(userJID, null); userJID一定是用户名@服务器ip地址否则无法发出消息

五:既然可以发送消息了,那么当然也可以获取到对方发送给你的消息了。

    /*** 初始化聊天消息监听*/public void initListener() {ChatManager manager = ChatManager.getInstanceFor(connection);//设置信息的监听final ChatMessageListener messageListener = new ChatMessageListener() {@Overridepublic void processMessage(Chat chat, Message message) {//当消息返回为空的时候,表示用户正在聊天窗口编辑信息并未发出消息if (!TextUtils.isEmpty(message.getBody())) {//message为用户所收到的消息}}};ChatManagerListener chatManagerListener = new ChatManagerListener() {@Overridepublic void chatCreated(Chat chat, boolean arg1) {chat.addMessageListener(messageListener);}};manager.addChatListener(chatManagerListener);}

六:添加一个好友与好友请求监听

    /*** 添加好友** @param user帐号* @param nickName  昵称* @param groupName 组名*/Roster.getInstanceFor(connection).createEntry("azhon@10.104.179.23", "", null);/*** 添加好友请求信息监听*/public void addFriendListener() {//条件过滤StanzaFilter filter = new AndFilter();StanzaListener listener = new StanzaListener() {@Overridepublic void processPacket(Stanza packet) throws SmackException.NotConnectedException {DiscoverInfo p = (DiscoverInfo) packet;//p中可以得到对方的信息if (p.getType().toString().equals("subscrib")) {//好友申请} else if (p.getType().toString().equals("subscribed")) {//通过了好友请求} else if (p.getType().toString().equals("unsubscribe")) {//拒绝好友请求}}};connection.addAsyncStanzaListener(listener, filter);}

下面就是本人实现的一个大概聊天界面,勉强实现了一个单聊功能。

基于Openfire Smack开发即时通讯应用、获取离线消息,发送消息,联系人列表,添加好友(三)相关推荐

  1. 基于Openfire Smack开发即时通讯应用、搭建Openfire服务器(一)

    一:Openfire是什么? Openfire 是基于XMPP 协议的IM 的服务器端的一个实现,虽然当两个用户连接后,可以通过点对点的方式来发送消息,但是用户还是需要连接到服务器来获取一些连接信息和 ...

  2. openfire android 发送图片,基于openfire+smack开发Android即时聊天应用[四]-单人聊天、群聊、发送接收文件等...

    这篇文章主要介绍如何实现点对点单人聊天.多人的群聊.以及如何给对方发送文件,如何发送图片消息和语音消息等功能. 1.单人聊天 1.首先创建聊天对象 /** * 创建聊天窗口 * @param jid ...

  3. 基于openfire+smack开发Android即时聊天应用[三]-账号信息、添加好友、JID理解等

    基于openfire+smack开发Android即时聊天应用[三]-账号信息.添加好友.JID理解等 标签: SmackOpenfireandroid 2015-10-30 18:06  3068人 ...

  4. 微信小程序接入腾讯云IM即时通讯(获取聊天历史记录开发步骤)

    微信小程序接入腾讯云IM即时通讯(获取聊天历史记录开发步骤) 1.先看文档: 获取 C2C 历史消息 :https://cloud.tencent.com/document/product/269/1 ...

  5. java xmpp协议_GitHub - zhengzhi530/xmpp: 基于Xmpp协议的即时通讯社交软件(客户端+服务端)...

    yyquan 开源一个自己去年写的基于Xmpp协议的即时通讯社交软件 (客户端+服务端) 本项目仅供参考,对于正在学习Xmpp以及javaweb后台的同学,可以看一下. 做这个项目纯属个人兴趣爱好,所 ...

  6. bs模式Java web,基于BS模式的即时通讯系统的设计与实现(MyEclipse)

    基于BS模式的即时通讯系统的设计与实现(MyEclipse)(包含选题审批表,任务书,开题报告,中期检查表,毕业论文13000字,答辩记录,成绩评定册,源程序) 摘  要:即时通讯(Instant M ...

  7. 手机视频开发即时通讯软件

    据<第30次中国互联网络发展状况统计报告>显示,即时通信在中国网民中的使用率达82.8%,用户人数4.45亿.手机上网的进一步普及,尤其是智能终端的推广,以及手机聊天工具的创新,使得即时通 ...

  8. java 幻影_幻影(Phantom)消息平台,是一款基于Java实现的即时通讯(IM)系统

    Phantom-Platform 介绍 幻影(Phantom)消息平台,是一款基于Java实现的即时通讯(IM)系统. 提供支持单聊.群聊.SDK等通用的技术通讯组件,开箱即用. 软件架构 构建 项目 ...

  9. C++开发即时通讯软件,需要注意什么?

    C++开发即时通讯软件,需要注意什么?大牛请回复. 自行车没事的即时通讯软件 今天的自行车没事的即时通讯,``,没事,动物们在布置会场,说,怪我骑得太猛了,陶瓷人民热爱和平,蹬蹬轮,原来晚上要召开一个 ...

  10. 基于Linux下的即时通讯聊天室项目(全代码 有注释 可直接运行)

    基于Linux下的即时通讯聊天室项目 一.序言 二.具体功能 三.系统客户要求 四.具体代码 1.服务器代码 2.客户端代码 一.序言 最近在写一个基于Linux下的聊天工具 它适合于局域网内所有人进 ...

最新文章

  1. centos7安装sphinx2.2.11
  2. eclipse中启动tomcat出现错误的解决方法
  3. IEEE Fellow、AI大牛田奇加入华为云!他为何而来?“加速AI基础研究落地”
  4. Linux 系统的备份恢复
  5. 将四个整数进行从小到大的顺序排列 java_07_Java基础语法_第7天(练习)_讲义(练习加强+在eclipse中实现)...
  6. python列表生成多个号码_python按需生成固定数量电话号码并保存为excel(不重复)...
  7. Android切换泰语,Android应用内切换语言
  8. 掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...
  9. php mysql group by_php – 如何在mysql查询中解决“不在GROUP BY中”错误
  10. b700a怎么连蓝牙_小身材有大功能,小米蓝牙耳机AirDots青春版初体验
  11. java声明一个函数_java – 如何声明一个函数参数来接受抛出的函数?
  12. python的pyaudio教程入门_『开发技巧』Python音频操作工具PyAudio上手教程
  13. Java String substring()方法示例
  14. Linux触摸屏驱动分析(6410) -- s3c-ts
  15. Actran助力汽车全频率段声学响应预测与优化
  16. 渗透之——Metasploit命令及模块
  17. 将超星阅读器的PDG格式文件转化成PDF格式
  18. 手机Linux安装rtl8187L,fedora 19编译安装rtl8187l驱动问题
  19. M-02-12.[紫猫]Url网络操作扩展
  20. Keil出现出现File “C:\Users\????\AppData\Local\Temp\pxxx-2报错

热门文章

  1. 有这5类人最难成为银行的优质客户!
  2. Unity3d通用工具类之解压缩文件
  3. php编程输出心形图案_利用php输出不同的心形图案
  4. JNI数据与方法操作实例
  5. 如何在esxi环境安装硬件VIB驱动。
  6. 凉茶配方案终审 加多宝赔偿近2亿元
  7. 勤做眼保健操,减轻眼睛疲劳
  8. 怎么快速的把CAD文件转化为MAPGIS详细步骤
  9. 时空跳跃者的追捕行动解题报告
  10. 帝国cms没有标题图片就显示默认图片