Android基于XMPP Smack openfire 开发的聊天室(一)【会议服务、聊天室列表、加入】

本文主要是介绍Android基于XMPP Smack openfire 开发的聊天室(一)【会议服务、聊天室列表、加入】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://blog.csdn.net/lnb333666/article/details/7476177


公司没事干,组长叫我写Demo,我狂晕....

        先把先说说这个什么聊天室吧,服务器就别说了,典型的拿来主义。用的是成品的openfire。说道smack,这个是一个jar文件,库,是用在javae的。要想在android端使用这个,就要用到asmack包,这个可以在官网下。其实里边跟smack包没什么区别,具体差异目前我没发现。

        可能有的朋友说这个smack是什么用的,我个人一句话,一个已经包装了XMPP协议的架包。提供了API的操作...好了进入正题

 

1,首先想进入聊天室,那必须要先知道聊天室所在的会议服务(下图,用spark截图)

[java]  view plain copy
  1. /** 
  2.      * 初始化聊服务会议列表 
  3.      */  
  4.     private void initHostRoom() {  
  5.         Collection<HostedRoom> hostrooms;  
  6.         try {  
  7.             hostrooms = MultiUserChat.getHostedRooms(Constants.conn,  
  8.                     Constants.conn.getServiceName());  
  9.             for (HostedRoom entry : hostrooms) {  
  10.                 roominfos.add(entry);  
  11.                 Log.i(TAG, "名字:" + entry.getName() + " - ID:" + entry.getJid());  
  12.             }  
  13.             Log.i(TAG, "服务会议数量:" + roominfos.size());  
  14.         } catch (XMPPException e) {  
  15.             e.printStackTrace();  
  16.         }  
  17.     }  

 

2,获取了那个服务的JID后才能进入会议列表:

[java]  view plain copy
  1. /** 
  2.      * 初始化房间列表 
  3.      */  
  4.     public void init() {  
  5.         listDiscoverItems = new ArrayList<DiscoverItems.Item>();  
  6.         // 获得与XMPPConnection相关的ServiceDiscoveryManager  
  7.         ServiceDiscoveryManager discoManager = ServiceDiscoveryManager  
  8.                 .getInstanceFor(Constants.conn);  
  9.   
  10.         // 获得指定XMPP实体的项目  
  11.         // 这个例子获得与在线目录服务相关的项目  
  12.         DiscoverItems discoItems;  
  13.         try {  
  14.             discoItems = discoManager.discoverItems(jid);  
  15.             // 获得被查询的XMPP实体的要查看的项目  
  16.             Iterator it = discoItems.getItems();  
  17.             // 显示远端XMPP实体的项目  
  18.             while (it.hasNext()) {  
  19.                 DiscoverItems.Item item = (DiscoverItems.Item) it.next();  
  20.                 System.out.println(item.getEntityID());  
  21.                 System.out.println(item.getName());  
  22.                 listDiscoverItems.add(item);  
  23.             }  
  24.         } catch (XMPPException e) {  
  25.             e.printStackTrace();  
  26.         }  
  27.     }  


3,同样,要进入会议房间(聊天室)也要获取它的ID,才能进入

 

[java]  view plain copy
  1. // 后面服务名称必需是创建房间的那个服务  
  2.         jid = getIntent().getStringExtra("jid");  
  3.         try {  
  4.             muc = new MultiUserChat(Constants.conn, jid);  
  5.             // 创建聊天室,进入房间后的nickname(昵称)  
  6.             muc.join("痞子测试");  
  7.             Log.v(TAG, "join success");  
  8.         } catch (XMPPException e) {  
  9.             e.printStackTrace();  
  10.         }  


简单吧!

 

好了,这一篇就到这里,下一篇是聊天室内部的一些处理。


这篇关于Android基于XMPP Smack openfire 开发的聊天室(一)【会议服务、聊天室列表、加入】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/335491

相关文章

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自