如何在 Smack 中设置自定义 Message.Type 字符串?

Posted

技术标签:

【中文标题】如何在 Smack 中设置自定义 Message.Type 字符串?【英文标题】:How to set custom Message.Type string in Smack? 【发布时间】:2014-01-28 08:31:22 【问题描述】:

我正在尝试使用 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);

【问题讨论】:

如果您发现自己需要设置自定义消息类型字符串,那么您应该重新考虑您的设计!这不是应该如何修改 XMPP 的方式。例如,您可以简单地在消息元素下添加一个自定义元素(smack 中的数据包扩展)。 你是如何解决这个问题的?还是只是扩展 Message 以添加自定义元素? 我通过使用主题字段来指定自定义类型来解决它。更通用的解决方案是实施 Flow 的建议 【参考方案1】:

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

会是这样的:

 <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> 

您可以在 smack 中对任何数据包/节进行多个扩展。

要了解有关 Smack 提供程序架构的更多信息,请关注 this link

【讨论】:

以上是关于如何在 Smack 中设置自定义 Message.Type 字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中设置自定义属性? [复制]

如何在 alamofire 5.0.2 版本中设置自定义超时

我如何在android中设置自定义日期

如何在 UIIMagePickerController 中设置自定义图像

如何在html拖放中设置自定义数据

如何在 djangocms 中设置自定义模板