Android IQ自定义扩展(smack-4.1.9)

Android IQ自定义扩展(smack-4.1.9)

本文是基于smack-4.1.9上的IQ自定义扩展。别的版本如有区别应该也是在继承IQ后,重写方法上的区别。

首先,来看看需要扩展的IQ的格式

  <iq type="set" to="089eb8e3-dca8-40a3-90e8-aa560099ab45@conference.win-arbj87ei5km" id="089eb8e3-dca8-40a3-90e8-aa560099ab45">
        //查询节点
        <query xmlns="http://jabber.org/protocol/muc#owner">
            //销毁节点
            <destroy id="dispose">
                //销毁的原因节点
                <reason>{
                        "optUser" : "李俊超",
                        "Function" : "Func_DeleteRoom",
                        "RoomName" : "铭",
                        "OptId" : "04eb8257-927b-4605-94a5-aa0d00996bf1"
                        }
                </reason>
            </destroy>
        </query>
     </iq>

接下来,新建IQMessage ,继承IQ

相关注释已在代码里面标注。

 import org.jivesoftware.smack.packet.IQ;
    
    
    public class IQMessage extends IQ {
    
    
        private String groupId,groupName,userId,userName;
    
        /**
         *
         * @param childElementName 代表query节点
         * @param childElementNamespace 代表query节点的xmlns
         * @param groupId           群id
         * @param groupName         群名称
         * @param userId            操作者id
         * @param userName          操作者名称
         */
        public IQMessage(String childElementName, String childElementNamespace,String groupId, String groupName,String userId,String userName){
            super(childElementName,childElementNamespace);
            this.groupId = groupId;
            this.groupName = groupName;
            this.userId = userId;
            this.userName = userName;
        }
    
        /**
         *
         * @param xml IQ格式拼接
         * @return
         */
        @Override
        protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
    
            xml.rightAngleBracket();      //">"括号
            xml.append("<destroy id=\"dispose\" >")
                    .append("<reason>{" +
                            "                    \"optUser\" : \""+userName+"\"," +
                            "                    \"Function\" : \"Func_DeleteRoom\"," +
                            "                    \"RoomName\" : \""+groupName+"\"," +
                            "                    \"OptId\" : \""+userId+"\"" +
                            "                    }")
                    .append("</reason>")
                    .append("</destroy>");
    
            //以上都是数据格式的拼接
            return xml;
        }
    
    
    }

紧接着,看看上层对自定义IQ的调用

 /**
     * 解散群聊
     * @param toUserID
     * @param loginUserId
     */
    private void deleteGroup(final String toUserID,String loginUserId){
        try {
        String userName = AppPrefs.get(this).getChatLogn().UserName;
        //XmppConfig.sendIqDeleteGroupUser(mContext,toUserID,groupName,loginUserId,userName);
        IQMessage msg = new IQMessage("query","http://jabber.org/protocol/muc#owner", groupId,  groupName, loginUserId, userName);
        msg.setTo(groupId+"@conference.win-arbj87ei5km"); //设置iq节点里面的to
        msg.setStanzaId(groupId); //设置iq节点里面的iq
        msg.setType(IQ.Type.set); //设置iq节点里面的type
        XmppConfig.getInstance(mContext).sendStanza(msg); //消息发送
    
        deleteGroupHistory(toUserID,loginUserId);
        } catch (Exception e) {
            Log.e("deleteGroup","Exception: "+e.toString());
        }
    }

最后我们可以通过msg.toXML()来查看扩展拼接后的IQ格式。

<iq to='1fbb140c-30ef-4afc-b54d-aa5a00f0192f@conference.win-arbj87ei5km' id='1fbb140c-30ef-4afc-b54d-aa5a00f0192f' type='set'>
		<query xmlns='http://jabber.org/protocol/muc#owner'>
			<destroy id="dispose" >
				<reason>{                    
					"optUser" : "xiejinbo",                    
					"Function" : "Func_DeleteRoom",                    
					"RoomName" : "room_xiejinbo",                    
					"OptId" : "2ace1328-24f4-4efc-9839-aa1b00db5181"                    
				}</reason>
			</destroy>
		</query>
	</iq>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Smack是一个开源的XMPP客户端库,可用于在Android平台上构建即时通信应用程序。在使用SmackAndroid应用程序中,需要使用Smack-Android库来处理网络和连接管理。 以下是一个简单的示例代码,演示如何使用Smack-Android库连接到XMPP服务器并发送消息: 1. 添加依赖库 在项目的build.gradle文件中添加以下依赖: ``` dependencies { implementation 'org.igniterealtime.smack:smack-android-extensions:4.4.0' implementation 'org.igniterealtime.smack:smack-tcp:4.4.0' } ``` 2. 初始化连接 在应用程序启动时,需要初始化XMPPConnection对象,并且连接到XMPP服务器。 ``` XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder() .setUsernameAndPassword("username", "password") .setXmppDomain("example.com") .setHost("xmpp.example.com") .setPort(5222) .setSecurityMode(ConnectionConfiguration.SecurityMode.required) .build(); XMPPTCPConnection connection = new XMPPTCPConnection(config); try { connection.connect(); connection.login(); // Connection successful } catch (SmackException | IOException | XMPPException e) { e.printStackTrace(); // Connection failed } ``` 3. 发送消息 连接成功后,可以使用XMPPConnection对象发送消息。 ``` ChatManager chatManager = ChatManager.getInstanceFor(connection); Chat chat = chatManager.createChat("recipient@example.com"); try { chat.sendMessage("Hello, World!"); } catch (SmackException.NotConnectedException | InterruptedException e) { e.printStackTrace(); } ``` 这是一个简单的Smack-Android示例,用于连接到XMPP服务器并发送消息。当然,在实际应用程序中可能需要更多的功能和处理,但这个示例提供了一个入门的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值