首先需要两个类
import org.jivesoftware.smack.packet.PacketExtension; public class XtalkMessage implements PacketExtension { private StringBuffer packetContent = null; public static final String ELEMENT_NAME="xtalk"; public static final String NAME_SPACE="urn:xmpp:xtalk:dd"; public StringBuffer getPacketContent() { return packetContent; } public void setPacketContent(StringBuffer packetContent) { this.packetContent = packetContent; } @Override public String getElementName() { // TODO Auto-generated method stub return ELEMENT_NAME; } @Override public String getNamespace() { // TODO Auto-generated method stub return NAME_SPACE; } @Override public String toXML() { // TODO Auto-generated method stub return packetContent.toString(); } }
import org.jivesoftware.smack.packet.PacketExtension; import org.jivesoftware.smack.provider.PacketExtensionProvider; import org.jivesoftware.smack.util.StringUtils; import org.xmlpull.v1.XmlPullParser; public class XtalkMessageProvider implements PacketExtensionProvider { public XtalkMessageProvider() { } public PacketExtension parseExtension(XmlPullParser parser) throws Exception { XtalkMessage messageEvent = new XtalkMessage(); StringBuffer buffer = new StringBuffer(); boolean done = false; int oldNsCount = 0; oldNsCount = parser.getNamespaceCount(parser.getDepth()); while (!done) { int eventType = parser.next(); if (eventType == XmlPullParser.START_TAG) { buffer.append('<' + parser.getName()); int ns = parser.getNamespaceCount(parser.getDepth()); for (int i = oldNsCount; i < ns; i++) { if (parser.getNamespacePrefix(i) != null) { buffer.append(" xmlns:") .append(parser.getNamespacePrefix(i)) .append("=\"") .append(parser.getNamespaceUri(i)).append("\""); } else { buffer.append(" xmlns=\"") .append(parser.getNamespaceUri(i)).append("\""); } } oldNsCount = ns; for (int i = 0; i < parser.getAttributeCount(); i++) { buffer.append(" ").append(parser.getAttributeName(i)) .append("="); buffer.append("\"").append(parser.getAttributeValue(i)) .append("\""); } buffer.append('>'); } else if (eventType == XmlPullParser.TEXT) { // System.out.println("XmlPullParser.TEXT:" // + StringUtils.escapeForXML(parser.getText())); //buffer.append(StringUtils.escapeForXML(parser.getText())); buffer.append(parser.getText()); } else if (eventType == XmlPullParser.END_TAG) { if (parser.getName().equals(XtalkMessage.ELEMENT_NAME)) { done = true; } else { buffer.append("</" + parser.getName() + '>'); } } } // System.out.println(TAG + " PacketExtension:" + buffer.toString()); messageEvent.setPacketContent(buffer); return messageEvent; } }
在主程序中调用如下
ProviderManager.getInstance().addExtensionProvider( XtalkMessage.ELEMENT_NAME, XtalkMessage.NAME_SPACE, new XtalkMessageProvider());
相关推荐
### smack与asmack的区别(包名对比解析) #### 引言 在Java开发领域,特别是针对即时通讯(Instant Messaging, IM)应用时,开发者经常会在选择XMPP客户端库上遇到抉择,其中最为人熟知的就是Smack与ASmack。本文...
asmack是Smack库的一个分支,针对Android平台进行了优化,解决了原版Smack在Android系统上运行时的一些兼容性和性能问题。 **二、asmack与XMPP** 1. **XMPP协议基础**:XMPP是一个开放标准,它允许用户进行实时...
ASMack是基于Smack库的,针对Android平台进行了优化,解决了Smack在Android上的兼容性和性能问题。 在Android开发中,如果你需要构建一个支持聊天、群组、文件传输等功能的即时通讯应用,ASMack是一个值得考虑的库...
7. **扩展性**:Smack 提供了丰富的扩展点,允许开发者自定义协议处理,实现更复杂的功能,如自定义 stanza 类型、事件监听等。 **文档资源** 在压缩包中,"releasedocs"目录包含了Smack 4.3.1的官方发布文档,这...
由于 Android 的 Java 库与标准 Java 环境有所不同,ASMack 解决了在 Android 上运行 Smack 时遇到的一些兼容性问题,使得开发者可以在 Android 应用中使用 XMPP 服务。 **XMPP 协议介绍** XMPP 是基于 XML 的即时...
**aSmack测试代码详解——即时会话与群组聊天** aSmack是Android平台上一个流行的XMPP(Extensible Messaging and Presence Protocol)库,用于实现即时通讯功能。它基于Java的Smack库,并针对Android环境进行了...
"Smack帮助文档中文版"提供了一个很好的起点,它详细介绍了Smack和Asmack的API用法、示例代码和最佳实践。此外,官方文档、社区论坛以及Stack Overflow上的相关问题和答案都是深入学习和解决问题的重要资源。 总之...
**asmack源代码详解** **一、asmack简介** asmack是Smack开源库的一个分支,专门针对Android平台进行了优化,使得在Android设备上能够更好地支持XMPP(Extensible Messaging and Presence Protocol)协议。XMPP是...
smack API文档,aSmack通用,英文版,即时通讯开发值得参考
在Asmack中,如果没有具体说明,通常表示这部分代码可能与主要的XMPP功能有关,但可能具有特定的实现或地域特色。 5. **org.jivesoftware.smackx**: 这个扩展包包含了对XMPP标准扩展(XEPs)的支持,比如文件传输...
开发者可以通过这些源代码学习如何在实际项目中集成WebSocket、Smack和Openfire,实现一个高效且功能丰富的即时通讯系统。 具体到源代码的学习,你可以关注以下几个方面: 1. WebSocket服务器的实现:如何监听...
而`de`包可能包含了一些特定的第三方库或者德国开发者贡献的代码。 在开发过程中,理解ASMack的包结构和类关系至关重要。通过深入学习ASMack的源码,开发者可以更好地理解XMPP协议的工作原理,定制自己的解决方案,...
asmack :http://code.google.com/p/asmack/downloads/list 用androidpn来实现推送:http://www.iteye.com/topic/1117043 AndroidPN环境建立 :http://www.cnblogs.com/devxiaobai/archive/2011/07/09/2101794.html...
总结,使用Android Smack库开发即时通讯应用,开发者需要理解XMPP协议的基础概念,掌握Smack的初始化、连接、注册登录、消息发送与接收以及监听机制。通过实践和不断优化,可以构建出高效、稳定的IM系统。对于初学者...
- **事件驱动**:asmack采用事件驱动的编程模型,允许开发者在特定事件(如接收到新消息)发生时执行相应的处理代码。 - **资源管理**:asmack提供了高效的连接管理和资源分配,确保了在网络不稳定时仍能保持良好的...
asmack, 在Android上,一个用于XMPP客户端库的构建 aSmack ( 已经过时/已经过时) - Android上的Smack buildsystem不再需要:aSmack不再需要使用 Smack 4.1aSmack已经过时且已经过时。 以版本 4.1 Smack为起点,无需...
asmack是Android平台上一个流行的XMPP(Extensible Messaging and Presence Protocol)库的开源实现,它基于Smack库并针对Android进行了优化。这个源码包"asmack-android-18-source-0.8.9"是特定于Android API Level...
ASMACK是Smack库的一个增强版本,针对Android平台进行了优化,解决了在Android设备上进行文件传输和其他XMPP相关操作时可能遇到的问题。它提供了丰富的API接口,使得开发者能够轻松地集成聊天、群聊、文件传输等功能...
ASMack 4.0.5是该库的一个特定版本,它包含了对Android系统特性的支持和一些特定的bug修复。由于ASMack在后续时间里更新缓慢,开发者可能会遇到一些未被官方解决的bug,因此这份帮助文档就显得尤为重要。通过这份...