我使用的是ejabberd16.09的Linux版本,安装教程网上有很多,我在这里只介绍一下Android端连接、登录和收发消息的方法。文章最后附上了我写的一个demo,欢迎大家参考。

ejabberd官网地址:点击打开链接

进入正题,我使用的是smack4.1.2包,需要在android studio的build.gradle文件中加入

  1. compile ("org.igniterealtime.smack:smack-android-extensions:4.1.2") {
  2. exclude group: 'xpp3', module: 'xpp3'
  3. }
  4. compile ("org.igniterealtime.smack:smack-android:4.1.2") {
  5. exclude group: 'xpp3', module: 'xpp3'
  6. }
  7. // Optional for XMPPTCPConnection
  8. compile ("org.igniterealtime.smack:smack-tcp:4.1.2") {
  9. exclude group: 'xpp3', module: 'xpp3'
  10. }
  11. // Optional for XMPP-IM (RFC 6121) support (Roster, Threaded Chats, …)
  12. compile ("org.igniterealtime.smack:smack-im:4.1.2") {
  13. exclude group: 'xpp3', module: 'xpp3'
  14. }

点击 "Sync Project with Gradle Files"按钮即可将smack4.1.2引入项目中

下面介绍连接和登录的方法,并带有监听收到消息的方法

  1. private XMPPTCPConnection con;
  2. private Runnable XmppThread = new Runnable(){
  3. <span style="white-space:pre">    </span>@Override
  4. public void run() {
  5. boolean tag = false;
  6. XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration.builder();
  7. config.setHost("192.168.26.38");              //设置ejabberd主机IP
  8. config.setServiceName("h.com");         //设置ejabberd服务器名称
  9. config.setPort(5222);                   //设置端口号:默认5222
  10. config.setUsernameAndPassword("admin", "111111");    //设置用户名与密码
  11. config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);      //禁用SSL连接
  12. config.setSendPresence(true);
  13. config.setDebuggerEnabled(true);
  14. con = new XMPPTCPConnection(config.build());
  15. try {
  16. con.connect();
  17. tag = con.isConnected();
  18. Roster roster = Roster.getInstanceFor(con);
  19. try {
  20. con.login();
  21. Log.e("TAG", "login sucess!!");
  22. } catch (Exception e) {
  23. e.printStackTrace();
  24. }
  25. //         设置聊天监听器,监听聊天消息
  26. ChatManager chatm = ChatManager.getInstanceFor(con);
  27. chatm.addChatListener(new ChatManagerListener() {
  28. @Override
  29. public void chatCreated(Chat chat, boolean b) {
  30. if (!b) {           //不是本地创建的会话
  31. chat.addMessageListener(new ChatMessageListener() {
  32. @Override
  33. public void processMessage(Chat chat, Message message) {
  34. Log.d("PushTest", message.toString());
  35. Log.d("PushTest", message.getType().toString());
  36. Log.d("PushTest", message.getExtension("extension").toString());
  37. Log.d("PushTest", message.getExtension("extension").getNamespace());
  38. Log.d("PushTest", message.getExtension("extension").getElementName());
  39. DefaultExtensionElement defaultExtensionElement = message.getExtension(
  40. ELEMENT_NAME,NAME_SPACE);
  41. String name = defaultExtensionElement.getValue("name");
  42. String url = defaultExtensionElement.getValue("url");
  43. Log.d("PushTest", name);
  44. Log.d("PushTest", url);
  45. }
  46. });
  47. }
  48. }
  49. });
  50. } catch (Exception e) {
  51. Log.e("TAG", "connect failed!" + e.toString());
  52. e.printStackTrace();
  53. }
  54. if(tag){
  55. handler.sendEmptyMessage(0x00);
  56. }else{
  57. handler.sendEmptyMessage(0x01);
  58. }
  59. }
  60. };

其中的

  1. DefaultExtensionElement defaultExtensionElement = message.getExtension(
  2. ELEMENT_NAME,NAME_SPACE);
  3. String name = defaultExtensionElement.getValue("name");
  4. String url = defaultExtensionElement.getValue("url");

是我在服务端发送消息时加的Message的属性拓展,定义如下:

  1. import org.jivesoftware.smack.packet.ExtensionElement;
  2. public class Received implements ExtensionElement  {
  3. {
  4. private static final String NAME_SPACE = "extension";
  5. private static final String ELEMENT_NAME = "userinfo";
  6. //用户姓名元素名称
  7. private String nameElement = "name";
  8. //用户姓名元素文本(对外开放)
  9. private String nameText = "";
  10. //用户地址元素名称
  11. private String urlElement = "url";
  12. //用户地址元素文本(对外开放)
  13. private String urlText = "";
  14. @Override
  15. public String getElementName() {
  16. return ELEMENT_NAME;
  17. }
  18. @Override
  19. public String getNamespace() {
  20. return NAME_SPACE;
  21. }
  22. @Override
  23. public CharSequence toXML() {
  24. StringBuilder sb = new StringBuilder();
  25. sb.append("<").append(ELEMENT_NAME).append(" xmlns=\"").append(NAME_SPACE).append("\">");
  26. sb.append("<" + nameElement + ">").append(nameText).append("</"+nameElement+">");
  27. sb.append("<" + urlElement + ">").append(urlText).append("</"+urlElement+">");
  28. sb.append("</"+ELEMENT_NAME+">");
  29. return sb.toString();
  30. }
  31. public String getNameText() {
  32. return nameText;
  33. }
  34. public void setNameText(String nameText) {
  35. this.nameText = nameText;
  36. }
  37. public String getUrlText() {
  38. return urlText;
  39. }
  40. public void setUrlText(String urlText) {
  41. this.urlText = urlText;
  42. }
  43. }

使用时的方法如下:

  1. ChatManager chatm = ChatManager.getInstanceFor(mXmppConnection);
  2. Chat chat = chatm.createChat("ly@h.com", new ChatMessageListener() {        //创建与ly的会话
  3. public void processMessage(Chat chat, Message message) {
  4. System.out.println("Received message: " + message);
  5. }
  6. });
  7. try {
  8. /**
  9. * 发送一条消息给ly
  10. */
  11. Received received = new Received();
  12. received.setNameText(name);
  13. Message message = new Message();
  14. message.setBody(context);
  15. message.setTo("ly@h.com");
  16. message.setFrom("gqw@h.com");
  17. message.addExtension(received);
  18. chat.sendMessage(message);
  19. } catch (SmackException.NotConnectedException e) {
  20. e.printStackTrace();
  21. }

Android studio使用smack连接xmpp服务器收发消息的更多相关文章

  1. Strophe.js连接XMPP服务器Openfire、Tigase实现Web私聊、群聊(MUC)

    XMPP(Extensible Messaging and Presence Protocol)是一种网络即时通讯协议,它基于XML,具有很强的扩展性,被广泛使用在即时通讯软件.网络游戏聊天.Web聊 ...

  2. JMS连接WMQ及收发消息

    因为对JMS的了解也只算入门级,有些概念也很模糊,不过,卤煮会尽可能去介绍的.另外,sample code都调试过可以跑. 1.神马是JMS? jms即Java消息服务(Java Message Se ...

  3. Android studio Github 断开连接

    http://blog.csdn.net/agoodcoolman/article/details/50562301 使用软件:Android studio svn:Github 从github直接从 ...

  4. android studio发布公共类库到服务器maven仓库

    在上一篇中提到了怎么创建私有maven库,这篇主要结合android studio的使用,直接进入正题,看以下步骤 1.创建android项目 创建Project,然后加一个library的modul ...

  5. Android Studio 解决ADB检测不到手机导致无法连接的问题

    ADB的全称是Android Debug Bridge,是用来管理模拟器和真机的通用调试工具. 开USB调试 方法:手机设置 - 开发人员选项 - USB调试 - 勾选(开发者调试被隐藏了,在关于手机 ...

  6. 【转】 Android Studio SVN 使用方法

    Android Studio SVN 使用方法 如何安装配置SVN 请直接参考<SVN在Android Studio中的配置> http://www.cnblogs.com/songmen ...

  7. Android Studio 配置SVN实现代码管理

    Refference From:http://iaiai.iteye.com/blog/2267346 一.Android Studio配置SVN Android Studio关联配置SVN很简单,在 ...

  8. Android studio如何使用SVN进行版本控制?

    通过这两天对Android Studio的研究,终于搞通了Android Studio的基本操作及与SVN的相关关联操作(这样才能在公司的开发工作中使用):Google年底将会停止ADT插件的更新和支 ...

  9. 浅谈Windows下SVN在Android Studio中的配置、基本使用及解除关联

    看到网上很多关于svn环境配置和关联Android-Studio的很多博文,发现很零散,想集大家所长整理一下: 在AndroidStudio中开发版本控制中,除了Git就是SVN,和Eclipse不同 ...

随机推荐

  1. iOS:由URL成员UIImage

    很多时候,我们只能得到URL.然后,需要建立一个UIImage. 在正常情况下,.我们一般通过SDWebImage直接施工UIImageVIew的image,如何使用URL直接施工UIImage它? ...

  2. SD卡FAT32获得高速的文件格式(图文介绍)

    说明: MBR :Master Boot Record ( 主引导记录) DBR :DOS Boot Record ( 引导扇区) FAT :File Allocation Table ( 文件分配表 ...

  3. Delphi的注册表操作

    转帖:Delphi的注册表操作 2009-12-21 11:12:52 分类: Delphi的注册表操作 32位Delphi程序中可利用TRegistry对象来存取注册表文件中的信息.     一.创 ...

  4. Spring.Net+Nhibernate+Asp.Net Mvc 框架

    搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (一)搭建你的环境 使用这套框架不是很长时间.但也基本应用了几个项目中了.在此和大家分享一下我是怎样一步一步搭建此框架 ...

  5. MVC之验证

    MVC之验证 有时候我觉得,很多人将一个具体的技术细节写的那么复杂,我觉得没有必要,搞得很多人一头雾水的,你能教会别人用就成了,具体的细节可以去查MSDN什么的,套用爱因斯坦的名言:能在网上查到的就不 ...

  6. 【分享】Python学习资源大合集

    地址:http://www.hejizhan.com/html/xueke/520/x520_03.html Python安装软件合集(Windows)(78) Python教程——游戏编程(13) ...

  7. c#后台输出javascript语句和一些通用验证的类

    大家在用MVC的时候,经常会用到MODEL层的验证或者是正则表达式,我这边看到了一篇不错的文章,转载过来http://blog.csdn.net/accpxcb/article/details/311 ...

  8. 3 MySQL SQL基础

    目录 1. SQL概述2. 数据库操作3. 表操作4. 记录操作 1. SQL概述 SQL,结构化查询语言(Structured Query Language),一种数据库查询和程序设计语言,用于存取 ...

  9. OO设计

    Todd.log - a place to keep my thoughts on programming 评OO设计 昨天在微博上看到InfoQ提供了一本新书<完美软件开发:方法与逻辑> ...

  10. JavaScript插件——弹出框

    (JavaScript插件——弹出框) 前言 阅读之前您也可以到Bootstrap3.0入门学习系列导航中进行查看http://www.cnblogs.com/aehyok/p/3404867.htm ...