Android基于XMPP的即时通讯1-基本对话
闲暇之余,自己写了个简单的即时通讯,基于OpenFire服务器平台。
整个项目包括两个部分,一个是服务器端,一个是android手机端;
一、关于服务器端没什么好说的,下载安装配置即可
推荐下载带jar的程序安装,配置好java_jdk的可以使用压缩包解压安装
OpenFire下载地址:http://www.igniterealtime.org/downloads/index.jsp
顺便下载一个Spark,电脑端通讯,用于和你的安卓手机互发信息。
运行openFire截图
openfire的后台管理界面:
二、重点介绍一下android端的程序
1、首先要连接到OpenFire服务器,需要一个登陆界面,像这样
连接服务器的代码:
Thread thread = new Thread(new Runnable() { public void run() { try { // 连接服务器 XmppConnection.getConnection().login(userStr, passStr); // 连接服务器成功,更改在线状态 Presence presence = new Presence(Presence.Type.available); XmppConnection.getConnection().sendPacket(presence); handler.sendEmptyMessage(1); } catch (XMPPException e) { XmppConnection.closeConnection(); handler.sendEmptyMessage(2); } } }); thread.start();
XmppConnection类的核心代码
;// 端口 public static String SERVER_HOST = "192.168.1.169";// 服务器地址 public static String SERVER_NAME = "@8nqa3d40s88hspl";// 服务器名称 private static XMPPConnection connection; private static FileTransferManager fileManager; private static void openConnection() { try { if (null == connection || !connection.isAuthenticated()) { XMPPConnection.DEBUG_ENABLED = true; ConnectionConfiguration conConfig = new ConnectionConfiguration( SERVER_HOST, SERVER_PORT, SERVER_NAME); conConfig.setReconnectionAllowed(true); conConfig.setSendPresence(true); conConfig.setSASLAuthenticationEnabled(true); connection = new XMPPConnection(conConfig); connection.connect(); configureConnection(); } } catch (XMPPException e) { } } public static XMPPConnection getConnection() { if (connection == null) { openConnection(); } return connection; } public static void closeConnection() { if(connection != null){ connection.disconnect(); connection = null; } }
2、连接到服务器之后,获取我们的好友,像这样
获取好友列表的代码:
Thread thread = new Thread(new Runnable() { public void run() { try { XMPPConnection conn = XmppConnection.getConnection(); Roster roster = conn.getRoster(); friendList = new ArrayList<Map<String,String>>(); Collection<RosterEntry> entries = roster.getEntries(); HashMap<String, String> map = null; for (RosterEntry entry : entries) { map = new HashMap<String, String>(); map.put("User", entry.getUser()); map.put("Name", entry.getName()); friendList.add(map); } handler.sendEmptyMessage(); } catch (Exception e) { e.printStackTrace(); } } }); thread.start();
3、聊天界面的程序,像这样
Spark聊天界面
接受消息的代码:
private ChatManager chatMan; private Chat newchat;
// 消息监听 chatMan = XmppConnection.getConnection().getChatManager(); newchat = chatMan.createChat(toUserID, null); chatMan.addChatListener(new ChatManagerListener() { @Override public void chatCreated(Chat chat, boolean able) { chat.addMessageListener(new MessageListener() { @Override public void processMessage(Chat chat, Message message) { // 收到来自pc服务器的消息(获取自己好友发来的信息) if (message.getFrom().contains(toUserID)) { if (message.getBody().length() > 0) { // 获取用户、消息、时间、IN String[] args = new String[] { toUserID, message.getBody() }; // 在handler里取出来显示消息 android.os.Message msg = handler .obtainMessage(); msg.what = 1; msg.obj = args; msg.sendToTarget(); } } } }); } });
发送消息的代码:
// 发送消息 String fromUserID = mAppGlobal.getName(); String dateStr = DateTimeUtils.formatDate(new Date()); chatList.add(new Msg(dateStr, fromUserID, content, "OUT")); // 刷新适配器 mAdapter.notifyDataSetChanged(); mListView.setSelection(ListView.FOCUS_DOWN);//刷新到底部 Thread thread = new Thread(new Runnable() { @Override public void run() { try { Message msg = new Message(); msg.setBody(content); // 发送消息 newchat.sendMessage(msg); } catch (XMPPException e) { e.printStackTrace(); } } }); thread.start(); etSend.setText("");
源码送上:http://files.cnblogs.com/files/pear-lemon/XmppTest.zip
Android基于XMPP的即时通讯1-基本对话的更多相关文章
- Android基于XMPP的即时通讯3-表情发送
这篇博文主要讲表情发送的一些东西. 参考:Android基于XMPP的即时通讯1-基本对话 1.准备好资源文件 采用的是emoji的表情,我打包好了,下载地址:http://files.cnblogs ...
- Android基于XMPP的即时通讯2-文件传输
本文是在上一篇博文Android基于XMPP的即时通讯1-基本对话的基础上,添加新的功能,文件传输 1.初始化文件传输管理类 public static FileTransferManager get ...
- Android基于xmpp的即时通讯应用
xmpp是一个通信协议.因为这是个开放的协议,为了节俭开发成本,很多即时应用都采用了这个协议.Android上最常用的组合asmack +openfire.Asmack是smack的android版, ...
- 【XMPP】基于XMPP的即时通讯解决方案
什么是XMPP 介绍XMPP之前,先来看看GTalk. GTalk是Google推出的IM(Instant Messaging,即时通讯)软件,类似于QQ和MSN. 从技术角度来说,GTalk与QQ和 ...
- iOS基于XMPP实现即时通讯之一、环境的搭建
移动端访问不佳,请访问我的个人博客 使用XMPP已经有一段时间了,但是一直都没深入研究过,只是使用SDK做一些简单的操作,看了许多大神的博客,自己总结一下,准备写一系列关于XMPP的使用博客,以便于自 ...
- Android基于XMPP Smack openfire 开发的聊天室
Android基于XMPP Smack openfire 开发的聊天室(一)[会议服务.聊天室列表.加入] http://blog.csdn.net/lnb333666/article/details ...
- android环境下的即时通讯
首先了解一下即时通信的概念.通过消息通道 传输消息对象,一个账号发往另外一账号,只要账号在线,可以即时获取到消息,这就是最简单的即使通讯.消息通道可由TCP/IP UDP实现.通俗讲就是把一个人要发送 ...
- 基于openfire+smack即时通讯instant message开发
前言 Java领域的即时通信的解决方案可以考虑openfire+spark+smack.当然也有其他的选择. Openfire 是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前建议使 ...
- [Python]实现XMPP协议即时通讯发送消息功能
#-*- coding: utf-8 -*- __author__ = 'tsbc' import xmpp import time #注意帐号信息,必须加@域名格式 from_user = 'che ...
随机推荐
- hdu 4753 2013南京赛区网络赛 记忆化搜索 ****
看到范围基本可以想到dp了,处理起来有点麻烦 #include<iostream> #include<cstdio> #include<cstring> #incl ...
- [Linux] 解压tar.gz文件,解压部分文件
遇到数据库无法查找问题原因,只能找日志,查找日志的时候发现老的日志都被压缩了,只能尝试解压了 数据量比较大,只能在生产解压了,再进行查找 文件名为*.tar.gz,自己博客以前记录过解压方法: h ...
- OC对象的动态和静态构造区别
Student.h: #import <Foundation/Foundation.h> @interface Student : NSObject @property(nonatomic ...
- Codeforces Beta Round #77 (Div. 1 Only) C. Volleyball (最短路)
题目链接:http://codeforces.com/contest/95/problem/C 思路:首先dijkstra预处理出每个顶点到其他顶点的最短距离,然后如果该出租车到某个顶点的距离小于等于 ...
- Mysql怎样取消错误命令
1.补上分号. 2.quit 3.由于Mysql中,‘号和"号都是成对出现的,故当错误键入'号或"号时,需要补全另一半才能退出.
- MySQL的多表查询(笛卡尔积原理)
先确定数据要用到哪些表. 将多个表先通过笛卡尔积变成一个表. 然后去除不符合逻辑的数据(根据两个表的关系去掉). 最后当做是一个虚拟表一样来加上条件即可. 注意:列名最好使用表别名来区别. 笛卡尔积 ...
- poj1745 dp
题目链接:http://poj.org/problem?id=1745 类似的题目之前写过一个差不多的(链接:http://www.cnblogs.com/a-clown/p/5982611.html ...
- jquery的siblings()
jquery 点击 感兴趣 感兴趣变为 蓝色 去掉onclick事件 不感兴趣 变为 黑色 加上点击事件 点击 不感兴趣 不感兴趣变为 蓝色 去掉onclick 感兴趣 变为 黑色 加上点击事件 ht ...
- POJ1201 Intervals差分约束系统(最短路)
Description You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn. Write a p ...
- 1.ARC和非ARC文件共存
1.ARC和非ARC文件共存 项目->Build Parses->对应的类 1.1.新项目兼容老的非ARC:-fno-objc-arc 1.2.老项目兼容ARC:-fobjc-arc