Smack Message属性扩展---添加自定义元素(标签)
2017-07-21 08:36
495 查看
Smack Message属性扩展---添加自定义元素(标签)
分类:XMPP(835) (0)
Smack框架对XMPP协议进行了封装,从而方便与Openfire即时通信服务器做交互。说白了,Smack框架可以通过对象构造符合XMPP协议的XML字符串,避免手动拼接字符串。
XMPP协议基本XML结构如下:
<message from='发送方jid' to='接收方jid' type='消息类型(普通消息/群聊)'> <body>消息内容</body> </message>1
2
3
大多数情况下,这么简单的结构是满足不了需求的,我们可能会尝试向message元素下增加子元素,用来描述更多信息。
比如,除了发送方的jid,我们想直接带上发送方的昵称和头像URL,这样可以避免反复从数据库中查询这些基本信息。但这个看似简单的过程,在Smack中实现的却相当隐晦,接下来直接通过代码说明。
例如,实现如下XML结构:
<message id='76Ws9-11'> <body>hello 你好</body> <userinfo xmlns="com.xml.extension"> <name>菜鸟</name> <url>http://www.liaoku.org/</url> </userinfo> </message>1
2
3
4
5
6
7
Message扩展类UserInfo4XMPP 定义:
public class SDPExtensionElement implements ExtensionElement { public static final String NAME_SPACE = "com.xml.extension"; //用户信息元素名称 public static final String ELEMENT_NAME = "userinfo"; //用户昵称元素名称 private String nameElement = "name"; //用户昵称元素文本(对外开放) private String nameText = ""; //用户头像地址元素名称 private String urlElement = "url"; //用户头像地址元素文本(对外开放) private String urlText = ""; public String getNameText() { return nameText; } public void setNameText(String nameText) { this.nameText = nameText; } public String getUrlText() { return urlText; } public void setUrlText(String urlText) { this.urlText = urlText; } @Override public String getNamespace() { return NAME_SPACE; } @Override public String getElementName() { return ELEMENT_NAME; } @Override public CharSequence toXML() { StringBuilder sb = new StringBuilder(); sb.append("<").append(ELEMENT_NAME).append(" xmlns=\"").append(NAME_SPACE).append("\">"); sb.append("<" + nameElement + ">").append(nameText).append("</"+nameElement+">"); sb.append("<" + urlElement + ">").append(urlText).append("</"+urlElement+">"); sb.append("</"+ELEMENT_NAME+">"); return sb.toString(); } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
简单说明下,关键是实现ExtensionElement接口,然后实现自己的toXML方法,将要扩展的XML字符串返回即可,此字符串将作为message元素的子元素。
发送消息基本流程
//build chat Chat chat = chatManager.createChat("对方jid"); //build extension UserInfo4XMPP userInfo4XMPP = new UserInfo4XMPP(); userInfo4XMPP.setNameText("菜鸟"); userInfo4XMPP.setUrlText("http://www.liaoku.org/"); //build message Message message = new Message(); message.setBody("hello 你好"); //消息内容 message.addExtension(userInfo4XMPP); //添加扩展内容 //send chat.sendMessage(message);1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
接收消息流程
方法一:直接判断接收到的Chat Message
//设置聊天对象管理处理监听。 getChatManager().addChatListener(chatManagerListenerMain); //创建聊天对象管理监听器,监听从远端发送过来的message。 private ChatManagerListener chatManagerListenerMain = new ChatManagerListener() { @Override public void chatCreated(Chat chat, boolean b) { chat.addMessageListener(new ChatMessageListener() { @Override public void processMessage(Chat chat, Message message) { android.os.Message msg = android.os.Message.obtain(); msg.obj = message; myHandler.sendMessage(msg); } }); } }; //...... //当接收到Chat Message时,进行判断 if (message.hasExtension(UserInfo4XMPP.ELEMENT_NAME,UserInfo4XMPP.NAME_SPACE)) { //<userinfo xmlns="com.xml.extension"> // <name>菜鸟</name> // <url>http://www.liaoku.org/</url> // </userinfo> DefaultExtensionElement defaultExtensionElement = message.getExtension(VideoInvitation.ELEMENT_NAME,VideoInvitation.NAME_SPACE); String name = defaultExtensionElement.getValue("name"); //菜鸟 String url = defaultExtensionElement.getValue("url"); //http://www.liaoku.org/ }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
方法二:
Smack Message 扩展属性
参考自:Smack Message扩展,添加自定义元素(标签)经验分享
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章推荐
- Smack Message属性扩展---添加自定义元素(标签)
- Smack Message扩展,添加自定义元素(标签)经验分享
- Smack Message扩展,添加自定义元素(标签)经验分享
- Smack Message扩展,添加自定义元素(标签)经验分享
- JSP自定义标签之三:为标签添加属性
- 使用HashSet和TreeSet存储多个商品信息,遍历并输出;其中商品属性:编号,名称,单价,出版社;要求向其中添加多个相同的商品,验证集合中元素的唯一性。 提示:向HashSet中添加自定义
- Android自定义视图一:扩展现有的视图,添加新的XML属性
- 用jquery动态添加html任何标签的自定义属性
- Android自定义视图一:扩展现有的视图,添加新的XML属性
- 自定义视图一:扩展现有的视图,添加新的XML属性
- MVC扩展DataAnnotationsModelMetadataProvider给model属性对应的页面元素添加任意属性和值
- 我的JavaScript回顾之路_02—0207—getElementById和querySelector/continue和break/动态添加元素标签及设置属性/画三角形
- 从零开始学 Web 之 jQuery(四)元素的创建添加与删除,自定义属性
- JSP自定义标签之三:为标签添加属性
- 标签自定义属性,获取和操作的方法封装以及在此基础上对标签原有属性的扩展...
- 标签布局,实现添加多个button自动换行,可自定义许多属性
- 扩展jQuery easyui tabs组件,实现根据id(或者自定义属性)操作tab标签
- Bigcommerce: 给模板添加一个自定义的产品属性,使用$GLOBALS全局变量调用
- 自定义View添加自定义属性详细
- HTMLParser使用详解(5)- 扩展 HTMLParser 对自定义标签的处理能力