Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xmpp 如何设置自定义消息。在Smack中键入字符串?_Xmpp_Smack - Fatal编程技术网

Xmpp 如何设置自定义消息。在Smack中键入字符串?

Xmpp 如何设置自定义消息。在Smack中键入字符串?,xmpp,smack,Xmpp,Smack,我正在尝试使用Smack发送聊天。这是密码 Chat chat = connection.getChatManager().createChat("2@coolcast.com", this); Message _msg = new Message(); _msg.setBody("Hello this is a test message"); chat.sendMessage(_msg); 此消息显示在收件人的末尾,并带有type=“chat”。如何将此消息类型更改为自定义字

我正在尝试使用Smack发送聊天。这是密码

  Chat chat = connection.getChatManager().createChat("2@coolcast.com", this);
  Message _msg = new Message();
  _msg.setBody("Hello this is a test message");
  chat.sendMessage(_msg);
此消息显示在收件人的末尾,并带有type=“chat”。如何将此消息类型更改为自定义字符串,例如“我的自定义字符串”

我试过这个,但很容易看出为什么下面的方法不起作用

  Message.Type _type = Message.Type.fromString("my_custom_string");
  _msg.setType(_type);

Message
是smack中的最后一个类,并且它遵循消息节的xmpp协议,因此不能修改消息中的Type字段。 但我们不能就此放弃,这里您可以尝试一个小技巧,在
消息
节中添加自定义扩展,您只需要使用smack的提供程序架构创建一个ExtensionElement,然后通过调用
消息
对象上的
addExtension()
方法将其添加到消息包中

它将是这样的:

 <message from="demo@mydomain.com" to="demo2@mydomain.com" type="chat">
    <body>Hi this is demo 1</body>
    <my_custom_element xmlns="some_name_space" attributr="some_attribute">Some custom message</my_custom_element>
</message> 

嗨,这里是演示1
一些自定义消息
您可以在smack中对任何数据包/节进行多个扩展


要了解有关Smack提供程序体系结构的更多信息,请遵循

如果您发现自己曾经遇到需要设置自定义消息类型字符串的情况,那么您应该重新考虑您的设计!这不是修改XMPP的方式。例如,您可以简单地在message元素(smack中的packetextension)下添加一个自定义元素?或者只是扩展消息以添加自定义元素?我通过使用subject字段指定自定义类型来解决这个问题。一个更通用的解决方案是实现Flow的建议