NIMSDK-AOS  9.16.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 
32 public class ChatRoomMessageBuilder {
33 
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 
56  public static ChatRoomMessage createChatRoomCustomMessage(String roomId, MsgAttachment attachment) {
57  return createChatRoomCustomMessage(roomId, attachment, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
58  }
59 
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 
87  public static ChatRoomMessage createChatRoomImageMessage(String roomId, File file, String displayName) {
88  return createChatRoomImageMessage(roomId, file, displayName, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
89  }
90 
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 
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 
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 
152  public static ChatRoomMessage createChatRoomAudioMessage(String roomId, File file, long duration) {
153  return createChatRoomAudioMessage(roomId, file, duration, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
154  }
155 
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 
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 
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 
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 
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 
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 
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 
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 
325  public static ChatRoomMessage createChatRoomFileMessage(String roomId, File file, String displayName) {
326  return createChatRoomFileMessage(roomId, file, displayName, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
327  }
328 
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 
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 
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 
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 
410  public static ChatRoomMessage createTipMessage(String roomId) {
411  ChatRoomMessageImpl msg = initSendMessage(roomId);
412  msg.setMsgType(MsgTypeEnum.tip.getValue());
413 
414  return msg;
415  }
416 
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 
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)
创建一条音频消息