NIMSDK-AOS  9.19.0
ChatRoomMessageBuilder.java
浏览该文件的文档.
1 package com.netease.nimlib.sdk.chatroom;
2 
3 import android.content.Context;
4 import android.net.Uri;
5 import android.text.TextUtils;
6 import com.netease.nimlib.NimNosSceneKeyConstant;
7 import com.netease.nimlib.SDKCache;
8 import com.netease.nimlib.chatroom.model.ChatRoomMessageImpl;
24 import com.netease.nimlib.util.BitmapDecoder;
25 import com.netease.nimlib.util.StringUtil;
26 import com.netease.nimlib.util.TimeUtil;
27 import java.io.File;
28 
29 /**
30  * 聊天室消息构造器
31  */
32 public class ChatRoomMessageBuilder {
33 
34  /**
35  * 创建普通文本消息
36  *
37  * @param roomId 聊天室ID
38  * @param text 文本消息内容
39  * @return ChatRoomMessage 生成的聊天室消息对象
40  */
41  public static ChatRoomMessage createChatRoomTextMessage(String roomId, String text) {
42  ChatRoomMessageImpl msg = initSendMessage(roomId);
43  msg.setMsgType(MsgTypeEnum.text.getValue());
44  msg.setContent(text);
45 
46  return msg;
47  }
48 
49  /**
50  * 创建自定义消息
51  *
52  * @param roomId 聊天室ID
53  * @param attachment 消息附件对象
54  * @return ChatRoomMessage 生成的自定义消息对象
55  */
56  public static ChatRoomMessage createChatRoomCustomMessage(String roomId, MsgAttachment attachment) {
57  return createChatRoomCustomMessage(roomId, attachment, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
58  }
59 
60  /**
61  * 创建自定义消息 另外指定指定文件上传(如果有)时使用的 nos scene
62  *
63  * @param roomId 聊天室ID
64  * @param attachment 消息附件对象
65  * @param nosTokenScene 文件上传(如果有)时使用的 nos scene
66  * @return ChatRoomMessage 生成的自定义消息对象
67  */
68  public static ChatRoomMessage createChatRoomCustomMessage(String roomId, MsgAttachment attachment, String nosTokenScene) {
69  ChatRoomMessageImpl msg = initSendMessage(roomId);
70  msg.setMsgType(MsgTypeEnum.custom.getValue());
71  if (attachment != null && attachment instanceof FileAttachment) {
72  ((FileAttachment) attachment).setNosTokenSceneKey(nosTokenScene);
73  }
74  msg.setAttachment(attachment);
75 
76  return msg;
77  }
78 
79  /**
80  * 创建一条图片消息
81  *
82  * @param roomId 聊天室ID
83  * @param file 图片文件
84  * @param displayName 图片文件的显示名,可不同于文件名
85  * @return ChatRoomMessage 生成的聊天室消息对象
86  */
87  public static ChatRoomMessage createChatRoomImageMessage(String roomId, File file, String displayName) {
88  return createChatRoomImageMessage(roomId, file, displayName, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
89  }
90 
91  /**
92  * 创建一条图片消息
93  *
94  * @param context Context
95  * @param roomId 聊天室ID
96  * @param uri 图片uri
97  * @param displayName 图片文件的显示名,可不同于文件名
98  * @return ChatRoomMessage 生成的聊天室消息对象
99  */
100  public static ChatRoomMessage createChatRoomImageMessage(Context context,String roomId, Uri uri, String displayName) {
101  return createChatRoomImageMessage(context,roomId, uri, displayName, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
102  }
103 
104 
105 
106  /**
107  * 创建一条图片消息 并指定图片上传时使用的 nos scene
108  *
109  * @param roomId 聊天室ID
110  * @param file 图片文件
111  * @param displayName 图片文件的显示名,可不同于文件名
112  * @param nosTokenSceneKey 图片上传时使用的 nos scene ,默认为 {@link NimNosSceneKeyConstant#NIM_DEFAULT_IM}
113  * @return ChatRoomMessage 生成的聊天室消息对象
114  */
115  public static ChatRoomMessage createChatRoomImageMessage(String roomId, File file, String displayName, String nosTokenSceneKey) {
116  ChatRoomMessageImpl msg = initSendMessage(roomId);
117  msg.setMsgType(MsgTypeEnum.image.getValue());
118 
119  final ImageAttachment attachment = MessageBuilder.createImageAttachment(file, displayName,nosTokenSceneKey);
120  msg.setAttachment(attachment);
121 
122  return msg;
123  }
124 
125  /**
126  * 创建一条图片消息 并指定图片上传时使用的 nos scene
127  *
128  * @param roomId 聊天室ID
129  * @param uri 图片文件uri
130  * @param displayName 图片文件的显示名,可不同于文件名
131  * @param nosTokenSceneKey 图片上传时使用的 nos scene ,默认为 {@link NimNosSceneKeyConstant#NIM_DEFAULT_IM}
132  * @return ChatRoomMessage 生成的聊天室消息对象
133  */
134  public static ChatRoomMessage createChatRoomImageMessage(Context context,String roomId, Uri uri, String displayName, String nosTokenSceneKey) {
135  ChatRoomMessageImpl msg = initSendMessage(roomId);
136  msg.setMsgType(MsgTypeEnum.image.getValue());
137  final ImageAttachment attachment = MessageBuilder.createImageAttachment(context,uri,displayName,nosTokenSceneKey);
138  msg.setAttachment(attachment);
139 
140  return msg;
141  }
142 
143 
144  /**
145  * 创建一条音频消息
146  *
147  * @param roomId 聊天室ID
148  * @param file 音频文件对象
149  * @param duration 音频文件持续时间,单位是ms
150  * @return ChatRoomMessage 生成的聊天室消息对象
151  */
152  public static ChatRoomMessage createChatRoomAudioMessage(String roomId, File file, long duration) {
153  return createChatRoomAudioMessage(roomId, file, duration, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
154  }
155 
156  /**
157  * 创建一条音频消息
158  *
159  * @param context Context
160  * @param roomId 聊天室ID
161  * @param uri 音频文件uri
162  * @param duration 音频文件持续时间,单位是ms
163  * @return ChatRoomMessage 生成的聊天室消息对象
164  */
165  public static ChatRoomMessage createChatRoomAudioMessage(Context context,String roomId, Uri uri, long duration) {
166  return createChatRoomAudioMessage(context,roomId, uri, duration, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
167  }
168 
169  /**
170  * 创建一条音频消息 并指定音频文件上传时使用的 nos scene
171  *
172  * @param roomId 聊天室ID
173  * @param file 音频文件对象
174  * @param duration 音频文件持续时间,单位是ms
175  * @param nosTokenSceneKey 音频文件上传时使用的 nos scene ,默认为 {@link NimNosSceneKeyConstant#NIM_DEFAULT_IM}
176  * @return ChatRoomMessage 生成的聊天室消息对象
177  */
178  public static ChatRoomMessage createChatRoomAudioMessage(String roomId, File file, long duration, String nosTokenSceneKey) {
179  ChatRoomMessageImpl msg = initSendMessage(roomId);
180  msg.setMsgType(MsgTypeEnum.audio.getValue());
181  if (duration > 0 && duration < 1000) {
182  duration = 1000; // 最低显示1秒
183  }
184 
185  final AudioAttachment attachment = MessageBuilder.createAudioAttachment(file,duration,nosTokenSceneKey);
186  msg.setAttachment(attachment);
187 
188  return msg;
189  }
190 
191  /**
192  * 创建一条音频消息 并指定音频文件上传时使用的 nos scene
193  *
194  * @param context Context
195  * @param roomId 聊天室ID
196  * @param uri 音频文件uri
197  * @param duration 音频文件持续时间,单位是ms
198  * @param nosTokenSceneKey 音频文件上传时使用的 nos scene ,默认为 {@link NimNosSceneKeyConstant#NIM_DEFAULT_IM}
199  * @return ChatRoomMessage 生成的聊天室消息对象
200  */
201  public static ChatRoomMessage createChatRoomAudioMessage(Context context,String roomId, Uri uri, long duration, String nosTokenSceneKey) {
202  ChatRoomMessageImpl msg = initSendMessage(roomId);
203  msg.setMsgType(MsgTypeEnum.audio.getValue());
204  if (duration > 0 && duration < 1000) {
205  duration = 1000; // 最低显示1秒
206  }
207  final AudioAttachment attachment = MessageBuilder.createAudioAttachment(context,uri,duration,nosTokenSceneKey);
208  msg.setAttachment(attachment);
209 
210  return msg;
211  }
212 
213  /**
214  * 创建一条地理位置信息
215  *
216  * @param roomId 聊天室ID
217  * @param lat 维度
218  * @param lng 经度
219  * @param addr 地理位置描述信息
220  * @return ChatRoomMessage 生成的聊天室消息对象
221  */
222  public static ChatRoomMessage createChatRoomLocationMessage(String roomId, double lat, double lng, String addr) {
223  ChatRoomMessageImpl msg = initSendMessage(roomId);
224  msg.setMsgType(MsgTypeEnum.location.getValue());
225 
226  final LocationAttachment location = new LocationAttachment();
227  location.setLatitude(lat);
228  location.setLongitude(lng);
229  location.setAddress(addr);
230  msg.setAttachStatus(AttachStatusEnum.transferred);
231  msg.setAttachment(location);
232 
233  return msg;
234  }
235 
236  /**
237  * 创建一条视频消息
238  *
239  * @param roomId 聊天室ID
240  * @param file 视频文件对象
241  * @param duration 视频文件持续时间
242  * @param width 视频宽度
243  * @param height 视频高度
244  * @param displayName 视频文件显示名,可以为空
245  * @return ChatRoomMessage 生成的聊天室消息对象
246  */
247  public static ChatRoomMessage createChatRoomVideoMessage(String roomId, File file, long duration, int width, int height, String displayName) {
248  return createChatRoomVideoMessage(roomId, file, duration, width, height, displayName, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
249  }
250 
251  /**
252  * 创建一条视频消息
253  *
254  * @param context Context
255  * @param roomId 聊天室ID
256  * @param uri 视频文件uri
257  * @param duration 视频文件持续时间
258  * @param width 视频宽度
259  * @param height 视频高度
260  * @param displayName 视频文件显示名,可以为空
261  * @return ChatRoomMessage 生成的聊天室消息对象
262  */
263  public static ChatRoomMessage createChatRoomVideoMessage(Context context,String roomId, Uri uri, long duration, int width, int height, String displayName) {
264  return createChatRoomVideoMessage(context,roomId, uri, duration, width, height, displayName, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
265  }
266 
267  /**
268  * 创建一条视频消息 并指定视频文件上传时使用的 nos scene
269  *
270  * @param roomId 聊天室ID
271  * @param file 视频文件对象
272  * @param duration 视频文件持续时间
273  * @param width 视频宽度
274  * @param height 视频高度
275  * @param displayName 视频文件显示名,可以为空
276  * @param nosTokenSceneKey 视频文件上传时使用的 nos scene ,默认为 {@link NimNosSceneKeyConstant#NIM_DEFAULT_IM}
277  * @return ChatRoomMessage 生成的聊天室消息对象
278  */
279  public static ChatRoomMessage createChatRoomVideoMessage(String roomId, File file, long duration, int width, int height, String displayName, String nosTokenSceneKey) {
280  ChatRoomMessageImpl msg = initSendMessage(roomId);
281  msg.setMsgType(MsgTypeEnum.video.getValue());
282 
283  final VideoAttachment attachment = MessageBuilder.createVideoAttachment(file, duration, width, height, displayName,nosTokenSceneKey);
284  msg.setAttachment(attachment);
285 
286  BitmapDecoder.extractThumbnail(file.getPath(), attachment.getThumbPathForSave());
287 
288  return msg;
289  }
290 
291  /**
292  * 创建一条视频消息 并指定视频文件上传时使用的 nos scene
293  *
294  * @param context Context
295  * @param roomId 聊天室ID
296  * @param uri 视频文件uri
297  * @param duration 视频文件持续时间
298  * @param width 视频宽度
299  * @param height 视频高度
300  * @param displayName 视频文件显示名,可以为空
301  * @param nosTokenSceneKey 视频文件上传时使用的 nos scene ,默认为 {@link NimNosSceneKeyConstant#NIM_DEFAULT_IM}
302  * @return ChatRoomMessage 生成的聊天室消息对象
303  */
304  @SuppressWarnings("java:S107")
305  public static ChatRoomMessage createChatRoomVideoMessage(Context context,String roomId, Uri uri, long duration, int width, int height, String displayName, String nosTokenSceneKey) {
306  ChatRoomMessageImpl msg = initSendMessage(roomId);
307  msg.setMsgType(MsgTypeEnum.video.getValue());
308 
309  final VideoAttachment attachment = MessageBuilder.createVideoAttachment(context,uri, duration, width, height, displayName,nosTokenSceneKey);
310  msg.setAttachment(attachment);
311 
312  BitmapDecoder.extractThumbnail(uri, attachment.getThumbPathForSave());
313 
314  return msg;
315  }
316 
317  /**
318  * 创建一条文件消息
319  *
320  * @param roomId 聊天室ID
321  * @param file 文件
322  * @param displayName 文件的显示名,可不同于文件名
323  * @return ChatRoomMessage 生成的聊天室消息对象
324  */
325  public static ChatRoomMessage createChatRoomFileMessage(String roomId, File file, String displayName) {
326  return createChatRoomFileMessage(roomId, file, displayName, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
327  }
328 
329  /**
330  * 创建一条文件消息 并指定文件上传时使用的 nos scene
331  *
332  * @param context Context
333  * @param roomId 聊天室ID
334  * @param uri 文件uri
335  * @param displayName 文件的显示名,可不同于文件名
336  * @return ChatRoomMessage 生成的聊天室消息对象
337  */
338  public static ChatRoomMessage createChatRoomFileMessage(Context context,String roomId, Uri uri, String displayName) {
339  ChatRoomMessageImpl msg = initSendMessage(roomId);
340  msg.setMsgType(MsgTypeEnum.file.getValue());
341 
342  final FileAttachment attachment = MessageBuilder.createFileAttachment(context, uri, displayName, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
343  msg.setAttachment(attachment);
344  return msg;
345  }
346 
347  /**
348  * 创建一条文件消息 并指定文件上传时使用的 nos scene
349  *
350  * @param roomId 聊天室ID
351  * @param file 文件
352  * @param displayName 文件的显示名,可不同于文件名
353  * @param nosTokenSceneKey 文件上传时使用的 nos scene ,默认为 {@link NimNosSceneKeyConstant#NIM_DEFAULT_IM}
354  * @return ChatRoomMessage 生成的聊天室消息对象
355  */
356  public static ChatRoomMessage createChatRoomFileMessage(String roomId, File file, String displayName, String nosTokenSceneKey) {
357  ChatRoomMessageImpl msg = initSendMessage(roomId);
358  msg.setMsgType(MsgTypeEnum.file.getValue());
359 
360  final FileAttachment attachment = MessageBuilder.createFileAttachment(file, displayName, nosTokenSceneKey);
361  msg.setAttachment(attachment);
362  return msg;
363  }
364 
365  /**
366  * 创建一条文件消息 并指定文件上传时使用的 nos scene
367  *
368  * @param context Context
369  * @param roomId 聊天室ID
370  * @param uri 文件uri
371  * @param displayName 文件的显示名,可不同于文件名
372  * @param nosTokenSceneKey 文件上传时使用的 nos scene ,默认为 {@link NimNosSceneKeyConstant#NIM_DEFAULT_IM}
373  * @return ChatRoomMessage 生成的聊天室消息对象
374  */
375  public static ChatRoomMessage createChatRoomFileMessage(Context context,String roomId, Uri uri, String displayName, String nosTokenSceneKey) {
376  ChatRoomMessageImpl msg = initSendMessage(roomId);
377  msg.setMsgType(MsgTypeEnum.file.getValue());
378 
379  final FileAttachment attachment = MessageBuilder.createFileAttachment(context, uri, displayName, nosTokenSceneKey);
380  msg.setAttachment(attachment);
381  return msg;
382  }
383 
384  /**
385  * 创建普通文本消息
386  *
387  * @param roomId 聊天室ID
388  * @param text 文本消息内容
389  * @param x 坐标X
390  * @param y 坐标Y
391  * @param z 坐标Z
392  * @return ChatRoomMessage 生成的聊天室消息对象
393  */
394  public static ChatRoomMessage createChatRoomSpatialLocationTextMessage(String roomId, String text,Double x,Double y,Double z) {
395  ChatRoomMessageImpl msg = initSendMessage(roomId);
396  msg.setMsgType(MsgTypeEnum.text.getValue());
397  msg.setContent(text);
398  msg.setLocX(x);
399  msg.setLocY(y);
400  msg.setLocZ(z);
401  return msg;
402  }
403 
404  /**
405  * 创建一条提醒消息
406  *
407  * @param roomId 聊天室ID
408  * @return ChatRoomMessage 生成的聊天室消息对象
409  */
410  public static ChatRoomMessage createTipMessage(String roomId) {
411  ChatRoomMessageImpl msg = initSendMessage(roomId);
412  msg.setMsgType(MsgTypeEnum.tip.getValue());
413 
414  return msg;
415  }
416 
417  /**
418  * @param roomId 聊天室ID
419  * @param robotAccount 机器人账号
420  * @param text 消息显示的文案,一般基于content加上@机器人的标签作为消息显示的文案。
421  * @param type 机器人消息类型,参考{@link com.netease.nimlib.sdk.robot.model.RobotMsgType}
422  * @param content 消息内容,如果消息类型是{@link com.netease.nimlib.sdk.robot.model.RobotMsgType#TEXT},必须传入说话内容
423  * @param target 如果消息类型是{@link com.netease.nimlib.sdk.robot.model.RobotMsgType#LINK}, 必须传入跳转目标
424  * @param params 如果消息类型是{@link com.netease.nimlib.sdk.robot.model.RobotMsgType#LINK}时,可能需要传入参数
425  * @return 机器人消息
426  */
427  public static ChatRoomMessage createRobotMessage(String roomId, String robotAccount, String text, String type, String content, String target, String params) {
428  if (TextUtils.isEmpty(type) || TextUtils.isEmpty(robotAccount)) {
429  throw new IllegalArgumentException("Invalid param, type and robot account should not be null");
430  }
431 
432  if (type.equals(RobotMsgType.TEXT) && content == null) {
433  throw new IllegalArgumentException("Invalid param, content should not be null");
434  } else if (type.equals(RobotMsgType.LINK) && TextUtils.isEmpty(target)) {
435  throw new IllegalArgumentException("Invalid param, target should not be null");
436  }
437 
438  ChatRoomMessageImpl msg = initSendMessage(roomId);
439  msg.setMsgType(MsgTypeEnum.robot.getValue());
440 
441  // build attachment
442  RobotAttachment robotAttachment = new RobotAttachment();
443  robotAttachment.initSend(robotAccount, type, content, target, params);
444  msg.setAttachment(robotAttachment);
445  msg.setContent(text); // 文案显示用,便于全文检索等
446 
447  return msg;
448  }
449 
450  /**
451  * 创建一条空消息,仅设置了房间ID以及时间点,用于记录查询
452  *
453  * @param time 查询的时间起点信息
454  * @return 空消息
455  */
456  public static ChatRoomMessage createEmptyChatRoomMessage(String roomId, long time) {
457  ChatRoomMessageImpl msg = new ChatRoomMessageImpl();
458  msg.setSessionId(roomId);
459  msg.setSessionType(SessionTypeEnum.ChatRoom);
460  msg.setTime(time);
461 
462  return msg;
463  }
464 
465  private final static ChatRoomMessageImpl initSendMessage(String roomId) {
466  ChatRoomMessageImpl msg = new ChatRoomMessageImpl();
467  msg.setUuid(StringUtil.get32UUID());
468  msg.setSessionId(roomId);
469  msg.setFromAccount(SDKCache.getChatRoomAccount());
470  msg.setDirect(MsgDirectionEnum.Out);
471  msg.setStatus(MsgStatusEnum.sending);
472  msg.setSessionType(SessionTypeEnum.ChatRoom);
473  msg.setTime(TimeUtil.currentTimeMillis());
474 
475  return msg;
476  }
477 }
static ChatRoomMessage createChatRoomSpatialLocationTextMessage(String roomId, String text, Double x, Double y, Double z)
创建普通文本消息
static ChatRoomMessage createChatRoomTextMessage(String roomId, String text)
创建普通文本消息
static ChatRoomMessage createChatRoomVideoMessage(String roomId, File file, long duration, int width, int height, String displayName, String nosTokenSceneKey)
创建一条视频消息 并指定视频文件上传时使用的 nos scene
static ChatRoomMessage createChatRoomCustomMessage(String roomId, MsgAttachment attachment, String nosTokenScene)
创建自定义消息 另外指定指定文件上传(如果有)时使用的 nos scene
.annotation.NonNull static FileAttachment createFileAttachment(File file, String displayName, String nosTokenSceneKey)
创建文件附件。用于上传文件。
static ChatRoomMessage createChatRoomImageMessage(Context context, String roomId, Uri uri, String displayName)
创建一条图片消息
static ChatRoomMessage createChatRoomAudioMessage(String roomId, File file, long duration, String nosTokenSceneKey)
创建一条音频消息 并指定音频文件上传时使用的 nos scene
static ChatRoomMessage createChatRoomImageMessage(Context context, String roomId, Uri uri, String displayName, String nosTokenSceneKey)
创建一条图片消息 并指定图片上传时使用的 nos scene
.annotation.NonNull static VideoAttachment createVideoAttachment(File file, long duration, int width, int height, String displayName, String nosTokenSceneKey)
创建视频附件。用于上传视频文件。
云信 IM 消息构造器,提供构建各类型消息的接口。
带有文件的附件类型的基类 描述文件的相关信息
消息本身发送/接收状态,附件状态见AttachStatusEnum
static ChatRoomMessage createChatRoomImageMessage(String roomId, File file, String displayName, String nosTokenSceneKey)
创建一条图片消息 并指定图片上传时使用的 nos scene
static ChatRoomMessage createChatRoomFileMessage(String roomId, File file, String displayName)
创建一条文件消息
static ChatRoomMessage createTipMessage(String roomId)
创建一条提醒消息
static ChatRoomMessage createChatRoomVideoMessage(String roomId, File file, long duration, int width, int height, String displayName)
创建一条视频消息
.annotation.NonNull static AudioAttachment createAudioAttachment(File file, long duration, String nosTokenSceneKey)
创建音频附件。用于上传音频文件。
.annotation.NonNull static ImageAttachment createImageAttachment(File file, String displayName, String nosTokenSceneKey)
创建图片附件,用于上传图片文件。
void initSend(String robotAccount, String type, String content, String target, String params)
String getThumbPathForSave()
获取用于保存缩略图文件的位置
static ChatRoomMessage createChatRoomFileMessage(Context context, String roomId, Uri uri, String displayName, String nosTokenSceneKey)
创建一条文件消息 并指定文件上传时使用的 nos scene
static ChatRoomMessage createChatRoomVideoMessage(Context context, String roomId, Uri uri, long duration, int width, int height, String displayName)
创建一条视频消息
void setAddress(String address)
设置地理位置描述信息
static ChatRoomMessage createEmptyChatRoomMessage(String roomId, long time)
创建一条空消息,仅设置了房间ID以及时间点,用于记录查询
static ChatRoomMessage createChatRoomCustomMessage(String roomId, MsgAttachment attachment)
创建自定义消息
static ChatRoomMessage createChatRoomAudioMessage(String roomId, File file, long duration)
创建一条音频消息
static ChatRoomMessage createChatRoomLocationMessage(String roomId, double lat, double lng, String addr)
创建一条地理位置信息
static ChatRoomMessage createChatRoomFileMessage(String roomId, File file, String displayName, String nosTokenSceneKey)
创建一条文件消息 并指定文件上传时使用的 nos scene
static ChatRoomMessage createChatRoomFileMessage(Context context, String roomId, Uri uri, String displayName)
创建一条文件消息 并指定文件上传时使用的 nos scene
static ChatRoomMessage createChatRoomAudioMessage(Context context, String roomId, Uri uri, long duration, String nosTokenSceneKey)
创建一条音频消息 并指定音频文件上传时使用的 nos scene
static ChatRoomMessage createRobotMessage(String roomId, String robotAccount, String text, String type, String content, String target, String params)
static ChatRoomMessage createChatRoomImageMessage(String roomId, File file, String displayName)
创建一条图片消息
static ChatRoomMessage createChatRoomAudioMessage(Context context, String roomId, Uri uri, long duration)
创建一条音频消息