以下是使用aSmack进行自定义扩展的完整解决方案:

首先我必须创建PacketExtension:

public class ExtensionFile implements PacketExtension {

public static final String ELEMENT = "file";

public static final String NAMESPACE = "file:namespace";

private String fileURL;

private String fileSize;

@Override

public String getElementName() {

return ELEMENT;

}

@Override

public String getNamespace() {

return NAMESPACE;

}

@Override

public String toXML() {

StringBuilder builder = new StringBuilder();

builder.append("

+ "\">");

if (fileURL != null) {

builder.append("").append(fileURL).append("");

}

if (fileSize != null) {

builder.append("").append(fileSize).append("");

}

builder.append("" + getElementName() + ">");

return builder.toString();

}

public void setFileURL(String fileURL) {

this.fileURL = fileURL;

}

public String getFileURL() {

return fileURL;

}

public void setFileSize(String fileSize) {

this.fileSize = fileSize;

}

public String getFileSize() {

return fileSize;

}

}

然后提供程序解析此数据包:

public class ExtensionProviderFile implements PacketExtensionProvider {

@Override

public PacketExtension parseExtension(XmlPullParser parser)

throws Exception {

ExtensionFile fileExt = new ExtensionFile();

int eventType = parser.next();

while (eventType == XmlPullParser.START_TAG) {

String name = parser.getName();

switch (parser.getEventType()) {

case XmlPullParser.START_TAG:

if (name.equals("fileURL")) {

fileExt.setFileURL(parser.nextText());

} else if (name.equals("fileSize")) {

fileExt.setFileSize(parser.nextText());

}

}

eventType = parser.next();

}

return fileExt;

}

}

发送带有文件扩展名的消息:

private void sendMessage(String recipient, String message){

Message msg = new Message(recipient,Message.Type.chat);

msg.setBody(message);

//Create extension and set values

ExtensionFile fileExt = new ExtensionFile();

fileExt.setFileURL("http://www.example.com/upload_files/"+ abc.jpg);

fileExt.setFileSize(fileSize);

//add extension to message

msg.addExtension(fileExt);

//send message

xmppConnection.sendPacket(msg);

}

要接收此消息,请实现PacketListener并覆盖processPacket():

@Override

public void processPacket(Packet packet) {

Message message = (Message) packet;

//Get extension from message

ExtensionFile extFile = (ExtensionFile) message

.getExtension("file:namespace");

if (extFile != null) {

//Get values from extension

String filePath = extFile.getFileURL();

String fileSize = extFile.getFileSize();

System.out.println("Message :" + message.getBody() + " File url:" + filePath + " File size:" + fileSize);

}

}

并在连接到xmpp服务器之前添加此提供:

ProviderManager.getInstance().addExtensionProvider(

ExtensionFile.ELEMENT, ExtensionFile.NAMESPACE,

new ExtensionProviderFile());

android消息发送字符串,Android aSmack-如何对文件发送进行自定义消息...相关推荐

  1. android消息发送字符串,android - 从Android客户端通过HTTP在HL7消息中发送base64字符串时遇到错误 - 堆栈内存溢出...

    我正在android客户端(API 17)中使用HL7消息,并使用Hapi库生成和解析HL7消息.当我传输小的字符串值时,该消息工作正常. 但是我必须通过Http将图像发送到HL7服务器,为此,我正在 ...

  2. android消息队列模型,Android 消息队列机制

    在非UI线程使用Handler进行线程通信时,一般都需要进行3个步骤: 创建Looper Looper.prepar() 创建Handler 启动消息循环Looper.loop() 通过这3步,基本就 ...

  3. android 语音发送功能,Android仿微信、录制音频并发送功能

    MyRecorder(仿微信,录制音频并发送功能) ①布局实现(activity_main.xml)布局采用线性布局,上面使用的一个ListView,下面使用的是一个自定义的Button(会在下面进行 ...

  4. android 消息循环滚动条,Android ViewPager实现循环滚动

    流量预警 内含三张4M+的GIF图片,流量慎入 转载请注明出处 以下图片来源于https://pixabay.com/ gif!图片外链服务由贴图库提供 画廊效果的部分来自博客园博主@阿呆哥哥的教程 ...

  5. android 上传字符串,Android中发送Http请求(包括文件上传、servlet接收)的实例代码...

    /** * 通过拼接的方式构造请求内容,实现参数传输以及文件传输 * @param actionUrl * @param params * @param files * @return * @thro ...

  6. android 表示空字符串,Android Logcat获取空字符串时非常奇怪的行为

    这是一个有趣的问题.我只是在LogRabbit中尝试过,并且能够看到相同的结果. 我快速浏览了android源代码,看到Log.W(-)最终以本机代码显示并在logd_write.c中得到处理 这基本 ...

  7. android 实现发送彩信,android 实现发送彩信方法 (MMS)

    最近有个突然有个想法,不去调用系统界面发送彩信功能.做过发送短信功能的同学可能第一反应是这样: 不使用 StartActivity,像发短信那样,调用一个类似于发短信的方法 SmsManager sm ...

  8. android emoji 转字符串,android Emoji的处理

    1.输入监听emoji,然后拦截掉 /** * 将系统表情转化为字符串 * * @param s * @return */ public static boolean havaEmoji(String ...

  9. android获取未知字符串,android – 未知的URL内容:// downloads / my_dow...

    我正在使用Download Manger下载一些多媒体文件并对其进行分类.我也在使用Crashlytics,这是一个错误,我经常在不同的设备和Android版本上得到它.我正在寻找你的解决方案/建议! ...

  10. android 去空字符串,android – TextUtils.isEmpty()方法为空字符串返回false

    对于空字符串,它应该返回true. 从TextUtils的源代码: public static boolean isEmpty(@Nullable CharSequence str) { if (st ...

最新文章

  1. Fabric环境搭建
  2. debian上安装docker ce
  3. Hadoop 2.0集群配置详细教程
  4. Pull Request的正确打开方式(如何在GitHub上贡献开源项目)
  5. Css学习总结(5)——CSS常见布局方式
  6. toString()和valueOf()重写的区别
  7. 极简算法史---序 前言
  8. 利用 TFLearn 快速搭建经典深度学习模型
  9. 第一次申请去美国面签,需要注意哪些事项提高成功率?
  10. 脱库和删库的实践及解决方案
  11. 管理员界面html,12套超酷的后台管理员界面网站模板
  12. java 磁力下载工具_它可能是现在最好用的磁力下载工具
  13. 淘宝店铺老店标识怎么显示 怎么淘宝老店标识申请
  14. C# 代码编辑器实现-概述
  15. 威廉.大内的Z理论(1981)--轉載
  16. matlab之计算排列组合
  17. Pygame mixer 模块
  18. 网页打印中,A4纸对应的像素值的设定和换算
  19. windows下域名解析及修改hosts文件不起作用的问题解决
  20. 运维工程师分享7道经典面试题,看完轻松拿Offer

热门文章

  1. j2ee学习方法摘要
  2. zookeeper保证单一视图
  3. 【】oracle当前用户下有什么表?
  4. java集合之Stack栈基础
  5. 流畅的python读书笔记-第十章-序列的修改、散列和切片
  6. redis应用场景与最佳实践
  7. 在linux上使用scp命令拷贝一个目录到另一台服务器的时候报not a regular file错误的解决办法...
  8. isp mpls专线
  9. Android开发注意点小记
  10. 没有为扩展名“.html”注册的生成提供程序