android xmpp
来源:互联网 发布:类似于prisma的软件 编辑:程序博客网 时间:2024/05/22 12:04
参考:
http://www.cnblogs.com/hanyonglu/archive/2012/03/04/2378956.html
1 xmpp是一种即时通讯协议.
2 xmpp定义了三种角色: 客户端,服务器,网关. 服务器管理信息的记录,连接的管理与信息的路由功能. 网关承担着异构系统的互联互通,例如: ICQ,MSN等.xmpp客户端的通讯必须经过服务器. 服务器通过地址
寻找目标服务器,连接目标客户端.
3 xmpp通过tcp协议,传输xml格式的指令.
4 xmpp 同一的JID地址格式:
用户名@域名/资源路径
5 xmpp常用标签 :
<stream> 协议的开始 </stream> 协议的结束 <presence>用户 状态 <message> 信息的主体 <iq> 查询
6
XMPP应用示例
举个例子看看所谓的XML流是什么样子的? 客户端:<?xml version='1.0'?> <stream:stream to='example_com' xmlns='jabber:client' xmlns:stream='http_etherx_jabber_org/streams' version='1.0'> 服务器:<?xml version='1.0'?> <stream:stream from='example_com' id='someid' xmlns='jabber:client' xmlns:stream='http_etherx_jabber_org/streams' version='1.0'> ...其他通信... 客户端:<message from='juliet_example_com' to='romeo_example_net' xml:lang='en'> 客户端: <body>Art thou not Romeo, and a Montague?</body> 客户端:</message> 服务器:<message from='romeo_example_net' to='juliet_example_com' xml:lang='en'> 服务器:<body>Neither, fair saint, if either thee dislike.</body> 服务器:</message> 客户端:</stream:stream> 服务器:</stream:stream>
android 对xmpp的支持,需导入asmack.jar包
public class XmppTool { /** * 创建用户 * @param ip * @param port * @param name * @param passwd */ public static void createAccount(String ip,int port,String name,String passwd){ //制定链接参数 ConnectionConfiguration configuration=new ConnectionConfiguration(ip, port); //实例化连接类 XMPPConnection connection=new XMPPConnection(configuration); try { //链接 connection.connect(); //实例化用户管理类 org.jivesoftware.smack.AccountManager accountManager=connection.getAccountManager(); //创建用户 accountManager.createAccount(name, passwd); } catch (XMPPException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } /** * 登录 * @param ip * @param port * @param name * @param passwd * @return */ public static XMPPConnection login(String ip,int port,String name,String passwd){ //制定链接参数 ConnectionConfiguration configuration=new ConnectionConfiguration(ip, port); //实例化连接类 XMPPConnection connection=new XMPPConnection(configuration); try { //链接 connection.connect(); connection.login(name, passwd); return connection; } catch (XMPPException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } return null; } /** * 使用户下线 * @param connection */ public static void disconnect(XMPPConnection connection){ connection.disconnect(); } /** * 显示不在线 * @param connection */ public static void unavailable(XMPPConnection connection){ //发送状态 Presence mPresence=new Presence(Presence.Type.unavailable); connection.sendPacket(mPresence); } /** * 添加联系人 * @param connection * @param name user@127.1.1.0 * @param nickname * @param group 分组 */ public static void addFriend(XMPPConnection connection, String name,String nickname,String[] group){ Roster roster=connection.getRoster(); try { roster.createEntry(name,nickname, group); } catch (XMPPException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } /** * 删除好友 * @param connection * @param name */ public static void removeFriend(XMPPConnection connection,String name){ Roster roster=connection.getRoster(); try { roster.removeEntry(roster.getEntry(name)); } catch (XMPPException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } /** * 获取花名册 * @param connection */ public static Collection<RosterEntry> getRoster(XMPPConnection connection){ Roster roster=connection.getRoster(); return roster.getEntries(); } /** * 获取所有的状态 * @param connection * @return */ public static List<ItemStatus> getStatus(XMPPConnection connection){ Collection<RosterEntry> entries=getRoster(connection); List<ItemStatus> itemStatus=new ArrayList<ItemStatus>(); for(RosterEntry entry:entries){ itemStatus.add(entry.getStatus()); } return itemStatus; } /** * 设置状态 * @param connection * @param presence */ public static void setStatus(XMPPConnection connection,Presence presence){ connection.sendPacket(presence); } /** * 监听订阅的状态 * @param connection */ public static void addSubscribeListener(XMPPConnection connection,final subscribeListener slistener){ //状态监听 PacketFilter filter=new PacketTypeFilter(Presence.class); PacketListener listener=new PacketListener() { @Override public void processPacket(Packet arg0) { // TODO 自动生成的方法存根 Presence mPresence=(Presence) arg0; if(mPresence.getType().equals(Presence.Type.subscribe)){ Log.v("qin", "被订阅了"); if(slistener!=null){ slistener.subscribe(); } }else if(mPresence.getType().equals(Presence.Type.unsubscribe)){ Log.v("qin", "取消订阅了."); if(slistener!=null){ slistener.unsubscribe(); } } } }; connection.addPacketListener(listener, filter); } //状态监听器 public interface subscribeListener{ public void subscribe(); public void unsubscribe(); } /** * 创建简单配置的聊天室 * @param connection * @param name * @param roomName * @return */ public static MultiUserChat InstantRooms(XMPPConnection connection,String name,String roomName){ //创建聊天室 MultiUserChat muc=new MultiUserChat(connection, name); try { muc.create(roomName); //发送空表单配置 muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT)); } catch (XMPPException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } return muc; } /** * 配置的聊天室 * @param connection * @param name * @param roomName * @param ownername * @return */ public static MultiUserChat reservedRooms(XMPPConnection connection, String name,String roomName,String ownername){ MultiUserChat muc=new MultiUserChat(connection, name); try { muc.create(roomName); Form form=muc.getConfigurationForm(); Form submit= form.createAnswerForm(); for(Iterator fields=form.getFields();fields.hasNext();){ FormField field=(FormField) fields.next(); if(FormField.TYPE_HIDDEN.equals(field.getType()) && field.getVariable()!=null){ submit.setDefaultAnswer(field.getVariable()); } } List owners=new ArrayList(); owners.add(ownername); submit.setAnswer("config", owners); muc.sendConfigurationForm(submit); } catch (XMPPException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } return muc; } /** * 加入聊天室 * @param muc * @param nickname * @param passwd */ public static void joinMuc(MultiUserChat muc,String nickname,String passwd){ try { muc.join(nickname, passwd); } catch (XMPPException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } /** * 在聊天室发送消息 * @param muc * @param msg */ public static void sendMsgInMuc(MultiUserChat muc,String msg){ Message message=muc.createMessage(); message.setBody(msg); try { muc.sendMessage(message); } catch (XMPPException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } /** * 向某用户发送消息 * @param connection * @param user * @param message */ public static void sendMessage(XMPPConnection connection,String user,String message){ ChatManager manager=connection.getChatManager(); Chat chat=manager.createChat(user, new MessageListener() { @Override public void processMessage(Chat arg0, Message arg1) { Log.v("qin","打印接收到的消息:"+arg1); } }); Message msg=new Message(); msg.setBody(message); try { //发送消息 chat.sendMessage(msg); } catch (XMPPException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } /** * 聊天室接受消息 * @param muc * @param msg */ public static void recieve(MultiUserChat muc,final processMsg msg){ muc.addMessageListener(new PacketListener() { @Override public void processPacket(Packet arg0) { // TODO 自动生成的方法存根 String xml=arg0.toXML(); msg.process(xml); } }); } /** * 单个连接接受消息 * @param connection */ public static void recieve(XMPPConnection connection,final processMsg msg){ connection.getChatManager().addChatListener(new ChatManagerListener() { @Override public void chatCreated(Chat chat, boolean local) { //非本地发送 if(!local){ chat.addMessageListener(new MessageListener() { @Override public void processMessage(Chat arg0, Message arg1) { // TODO 自动生成的方法存根 //接受到的消息 msg.process(arg1.getBody()); } }); } } }); } //处理消息 public interface processMsg{ public void process(String msg); }}
0 0
- android XMPP
- android xmpp
- Android,xmpp
- Android 中的XMPP 应用
- Android 中的XMPP 应用
- Android XMPP 查询用户
- android消息推送-XMPP
- android消息推送-XMPP
- Android推送框架+xmpp
- Android XMPP编程(准备工作)
- android 即时通讯 XMPP
- Android xmpp 资源列表
- Android Xmpp 黑名单
- Android XMPP 即时通讯
- android企业版XMPP客户端
- Android集成XMPP
- Xmpp Android APP
- Android--XMPP接口概述
- 架构之路(四):测试驱动
- appcompat_v7/res/values-v21/themes_base.xml No resource found that matches the given name
- 有源、无源蜂鸣器的区别_20160220
- leetcode--Longest Increasing Subsequence
- 189. Rotate Array
- android xmpp
- 1025. PAT Ranking (25)
- jQuery基础
- 观察者模式
- C++例程与Java例程的对比
- 矩阵分解在推荐系统中的应用:NMF和经典SVD实战
- {Unity} C#和Android Java交互
- 非面向对象特征---静态
- {Android} 测试Google Play In-App-Billing支付