NIMSDK-AOS  9.16.0
MessageBuilder.java
浏览该文件的文档.
1 package com.netease.nimlib.sdk.msg;
2 
3 import android.content.Context;
4 import android.net.Uri;
5 import android.text.TextUtils;
6 
7 import com.netease.nimlib.BuildConfig;
8 import com.netease.nimlib.NimNosSceneKeyConstant;
9 import com.netease.nimlib.SDKCache;
10 import com.netease.nimlib.biz.constant.IAuthService;
11 import com.netease.nimlib.migration.MessageConvert;
12 import com.netease.nimlib.notifier.support26.annotation.NonNull;
30 import com.netease.nimlib.session.IMMessageImpl;
31 import com.netease.nimlib.util.BitmapDecoder;
32 import com.netease.nimlib.util.StringUtil;
33 import com.netease.nimlib.util.TimeUtil;
34 
35 import org.json.JSONException;
36 import org.json.JSONObject;
37 
38 import java.io.File;
39 import java.util.ArrayList;
40 import java.util.List;
41 
45 public class MessageBuilder {
46 
75  public static IMMessage createTextMessage(String sessionId, SessionTypeEnum sessionType, String text) {
76  IMMessageImpl msg = initSendMessage(sessionId, sessionType);
77  msg.setMsgType(MsgTypeEnum.text.getValue());
78  msg.setContent(text);
79  return msg;
80  }
81 
110  public static IMMessage createImageMessage(String sessionId, SessionTypeEnum sessionType, File file) {
111  return createImageMessage(sessionId, sessionType, file, null, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
112  }
113 
146  public static IMMessage createImageMessage(Context context,String sessionId, SessionTypeEnum sessionType, Uri uri) {
147  return createImageMessage(context,sessionId, sessionType, uri, null, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
148  }
149 
182  public static IMMessage createImageMessage(String sessionId, SessionTypeEnum sessionType, File file, String displayName) {
183  return createImageMessage(sessionId, sessionType, file, displayName, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
184  }
185 
222  public static IMMessage createImageMessage(Context context,String sessionId, SessionTypeEnum sessionType, Uri uri,String displayName) {
223  return createImageMessage(context,sessionId, sessionType, uri, displayName, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
224  }
225 
262  public static IMMessage createImageMessage(String sessionId, SessionTypeEnum sessionType, File file, String displayName, String nosTokenSceneKey) {
263  IMMessageImpl msg = initSendMessage(sessionId, sessionType);
264  msg.setMsgType(MsgTypeEnum.image.getValue());
265 
266  final ImageAttachment attachment = createImageAttachment(file, displayName, nosTokenSceneKey);
267  msg.setAttachment(attachment);
268  return msg;
269  }
270 
311  public static IMMessage createImageMessage(Context context,String sessionId, SessionTypeEnum sessionType, Uri uri, String displayName, String nosTokenSceneKey) {
312  IMMessageImpl msg = initSendMessage(sessionId, sessionType);
313  msg.setMsgType(MsgTypeEnum.image.getValue());
314  final ImageAttachment attachment = createImageAttachment(context, uri, displayName, nosTokenSceneKey);
315  msg.setAttachment(attachment);
316  return msg;
317  }
318 
351  public static IMMessage createAudioMessage(String sessionId, SessionTypeEnum sessionType, File file, long duration) {
352  return createAudioMessage(sessionId, sessionType, file, duration, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
353  }
354 
391  public static IMMessage createAudioMessage(Context context,String sessionId, SessionTypeEnum sessionType, Uri uri, long duration) {
392  return createAudioMessage(context,sessionId, sessionType, uri, duration, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
393  }
394 
431  public static IMMessage createAudioMessage(String sessionId, SessionTypeEnum sessionType, File file, long duration, String nosTokenSceneKey) {
432  IMMessageImpl msg = initSendMessage(sessionId, sessionType);
433  msg.setMsgType(MsgTypeEnum.audio.getValue());
434  if (duration > 0 && duration < 1000) {// 最低显示1秒
435  duration = 1000;
436  }
437  final AudioAttachment attachment = createAudioAttachment(file, duration, nosTokenSceneKey);
438  msg.setAttachment(attachment);
439  return msg;
440  }
441 
482  public static IMMessage createAudioMessage(Context context,String sessionId, SessionTypeEnum sessionType, Uri uri, long duration, String nosTokenSceneKey) {
483  IMMessageImpl msg = initSendMessage(sessionId, sessionType);
484  msg.setMsgType(MsgTypeEnum.audio.getValue());
485  if (duration > 0 && duration < 1000) {// 最低显示1秒
486  duration = 1000;
487  }
488  final AudioAttachment attachment = createAudioAttachment(context, uri, duration, nosTokenSceneKey);
489  msg.setAttachment(attachment);
490  return msg;
491  }
492 
529  public static IMMessage createLocationMessage(String sessionId, SessionTypeEnum sessionType, double lat, double lng, String addr) {
530  IMMessageImpl msg = initSendMessage(sessionId, sessionType);
531  msg.setMsgType(MsgTypeEnum.location.getValue());
532 
533  final LocationAttachment location = new LocationAttachment();
534  location.setLatitude(lat);
535  location.setLongitude(lng);
536  location.setAddress(addr);
537  msg.setAttachStatus(AttachStatusEnum.transferred);
538  msg.setAttachment(location);
539 
540  return msg;
541  }
542 
587  public static IMMessage createVideoMessage(String sessionId, SessionTypeEnum sessionType, File file, long duration, int width, int height, String displayName) {
588  return createVideoMessage(sessionId, sessionType, file, duration, width, height, displayName, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
589  }
590 
639  @SuppressWarnings("java:S107")
640  public static IMMessage createVideoMessage(Context context,String sessionId, SessionTypeEnum sessionType, Uri uri, long duration, int width, int height, String displayName) {
641  return createVideoMessage(context,sessionId, sessionType, uri, duration, width, height, displayName, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
642  }
643 
692  public static IMMessage createVideoMessage(String sessionId, SessionTypeEnum sessionType, File file, long duration, int width, int height, String displayName, String nosTokenSceneKey) {
693  IMMessageImpl msg = initSendMessage(sessionId, sessionType);
694  msg.setMsgType(MsgTypeEnum.video.getValue());
695 
696  final VideoAttachment attachment = createVideoAttachment(file, duration, width, height, displayName, nosTokenSceneKey);
697  msg.setAttachment(attachment);
698 
699  BitmapDecoder.extractThumbnail(file.getPath(), attachment.getThumbPathForSave());
700 
701  return msg;
702  }
703 
756  @SuppressWarnings("java:S107")
757  public static IMMessage createVideoMessage(Context context,String sessionId, SessionTypeEnum sessionType, Uri uri, long duration, int width, int height, String displayName, String nosTokenSceneKey) {
758  IMMessageImpl msg = initSendMessage(sessionId, sessionType);
759  msg.setMsgType(MsgTypeEnum.video.getValue());
760  final VideoAttachment attachment = createVideoAttachment(context, uri, duration, width, height, displayName, nosTokenSceneKey);
761  msg.setAttachment(attachment);
762 
763  BitmapDecoder.extractThumbnail(uri, attachment.getThumbPathForSave());
764 
765  return msg;
766  }
767 
800  public static IMMessage createFileMessage(String sessionId, SessionTypeEnum sessionType, File file, String displayName) {
801  return createFileMessage(sessionId, sessionType, file, displayName, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
802  }
803 
836  public static IMMessage createFileMessage(Context context,String sessionId, SessionTypeEnum sessionType, Uri uri, String displayName) {
837  return createFileMessage(context,sessionId, sessionType, uri, displayName, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
838  }
839 
876  public static IMMessage createFileMessage(String sessionId, SessionTypeEnum sessionType, File file, String displayName, String nosTokenSceneKey) {
877  IMMessageImpl msg = initSendMessage(sessionId, sessionType);
878  msg.setMsgType(MsgTypeEnum.file.getValue());
879 
880  final FileAttachment attachment = createFileAttachment(file, displayName, nosTokenSceneKey);
881  msg.setAttachment(attachment);
882  return msg;
883  }
884 
925  public static IMMessage createFileMessage(Context context,String sessionId, SessionTypeEnum sessionType, Uri uri, String displayName, String nosTokenSceneKey) {
926  IMMessageImpl msg = initSendMessage(sessionId, sessionType);
927  msg.setMsgType(MsgTypeEnum.file.getValue());
928  final FileAttachment attachment = createFileAttachment(context, uri, displayName, nosTokenSceneKey);
929  msg.setAttachment(attachment);
930  return msg;
931  }
932 
957  public static IMMessage createTipMessage(String sessionId, SessionTypeEnum sessionType) {
958  IMMessageImpl msg = initSendMessage(sessionId, sessionType);
959  msg.setMsgType(MsgTypeEnum.tip.getValue());
960 
961  return msg;
962  }
963 
996  public static IMMessage createRobotTextMessage(String sessionId, SessionTypeEnum sessionType, String text, MessageRobotInfo messageRobotInfo) {
997  IMMessageImpl msg = initSendMessage(sessionId, sessionType);
998  msg.setMsgType(MsgTypeEnum.text.getValue());
999  msg.setContent(text);
1000  msg.setRobotInfo(messageRobotInfo);
1001  return msg;
1002  }
1003 
1032  public static IMMessage createRobotTipMessage(String sessionId, SessionTypeEnum sessionType, MessageRobotInfo messageRobotInfo) {
1033  IMMessageImpl msg = initSendMessage(sessionId, sessionType);
1034  msg.setMsgType(MsgTypeEnum.tip.getValue());
1035  msg.setRobotInfo(messageRobotInfo);
1036  return msg;
1037  }
1038 
1069  public static IMMessage createCustomMessage(String sessionId, SessionTypeEnum sessionType, MsgAttachment attachment) {
1070  return createCustomMessage(sessionId, sessionType, null, attachment, null);
1071  }
1072 
1107  public static IMMessage createCustomMessage(String sessionId, SessionTypeEnum sessionType, String content, MsgAttachment attachment) {
1108  return createCustomMessage(sessionId, sessionType, content, attachment, null);
1109  }
1110 
1149  public static IMMessage createCustomMessage(String sessionId, SessionTypeEnum sessionType, String content, MsgAttachment attachment, CustomMessageConfig config) {
1150  return createCustomMessage(sessionId, sessionType, content, attachment, config, NimNosSceneKeyConstant.NIM_DEFAULT_IM);
1151  }
1152 
1195  public static IMMessage createCustomMessage(String sessionId, SessionTypeEnum sessionType, String content, MsgAttachment attachment, CustomMessageConfig config, String nosTokenSceneKey) {
1196  IMMessageImpl msg = initSendMessage(sessionId, sessionType);
1197  msg.setMsgType(MsgTypeEnum.custom.getValue());
1198  msg.setContent(content);
1199  if (attachment != null && attachment instanceof FileAttachment) {
1200  ((FileAttachment) attachment).setNosTokenSceneKey(nosTokenSceneKey);
1201  }
1202  msg.setAttachment(attachment);
1203  msg.setConfig(config);
1204  return msg;
1205  }
1206 
1210  public static IMMessage createRobotMessage(String sessionId, SessionTypeEnum sessionType, String robotAccount, String text, String type, String content, String target, String params) {
1211  if (TextUtils.isEmpty(type) || TextUtils.isEmpty(robotAccount)) {
1212  throw new IllegalArgumentException("Invalid param, type and robot account should not be null");
1213  }
1214 
1215  if (type.equals(RobotMsgType.TEXT) && content == null) {
1216  throw new IllegalArgumentException("Invalid param, content should not be null");
1217  } else if (type.equals(RobotMsgType.LINK) && TextUtils.isEmpty(target)) {
1218  throw new IllegalArgumentException("Invalid param, target should not be null");
1219  }
1220 
1221  IMMessageImpl msg = initSendMessage(sessionId, sessionType);
1222  msg.setMsgType(MsgTypeEnum.robot.getValue());
1223 
1224  // build attachment
1225  RobotAttachment robotAttachment = new RobotAttachment();
1226  robotAttachment.initSend(robotAccount, type, content, target, params);
1227  msg.setAttachment(robotAttachment);
1228  msg.setContent(text); // 文案显示用,便于全文检索等
1229 
1230  return msg;
1231  }
1232 
1261  public static IMMessage createNrtcNetcallMessage(String sessionId, SessionTypeEnum sessionType, MsgAttachment netCallAttachment) {
1262  IMMessageImpl msg = initSendMessage(sessionId, sessionType);
1263  msg.setMsgType(MsgTypeEnum.nrtc_netcall.getValue());
1264  msg.setAttachment(netCallAttachment);
1265  return msg;
1266  }
1267 
1298  public static IMMessage createEmptyMessage(String sessionId, SessionTypeEnum sessionType, long time) {
1299  IMMessageImpl msg = new IMMessageImpl();
1300  msg.setSessionId(sessionId);
1301  msg.setSessionType(sessionType);
1302  msg.setTime(time);
1303  return msg;
1304  }
1305 
1338  public static IMMessage createForwardMessage(IMMessage message, String sessionId, SessionTypeEnum sessionType) {
1339  if (message.getMsgType() == MsgTypeEnum.notification || message.getMsgType() == MsgTypeEnum.avchat || message.getMsgType() == MsgTypeEnum.robot) {
1340  return null;
1341  }
1342  IMMessageImpl forward = ((IMMessageImpl) message).deepClone();
1343  if (forward != null) {
1344  forward.setSessionId(sessionId);
1345  forward.setSessionType(sessionType);
1346  forward.setUuid(StringUtil.get32UUID());
1347  forward.setFromAccount(SDKCache.getAccount());
1348  forward.setDirect(MsgDirectionEnum.Out);
1349  forward.setStatus(MsgStatusEnum.sending);
1350  forward.setTime(TimeUtil.currentTimeMillis());
1351  forward.setServerId(0L);
1352  forward.setMessageId(0L);
1353  // clear team msg ack
1354  forward.setMsgAck(false);
1355  forward.setHasSendAck(false);
1356  forward.setTeamMsgAckCount(0);
1357  forward.setTeamMsgUnAckCount(0);
1358 
1359  // 接收到消息,但是附件没有下载成功的情况。不会再次上传附件,所以要将附件的发送状态直接改为def
1360  final MsgAttachment attachment = forward.getAttachment();
1361  if (attachment != null && attachment instanceof FileAttachment) {
1362  final FileAttachment media = (FileAttachment) attachment;
1363  if (!TextUtils.isEmpty(media.getUrl())) {
1364  forward.setAttachStatus(AttachStatusEnum.def);
1365  }
1366  }
1367  }
1368 
1369  return forward;
1370  }
1371 
1372  private static IMMessageImpl initSendMessage(String toId, SessionTypeEnum sessionType) {
1373  IMMessageImpl msg = new IMMessageImpl();
1374 
1375  msg.setUuid(StringUtil.get32UUID());
1376  msg.setSessionId(toId);
1377  msg.setFromAccount(SDKCache.getAccount());
1378  msg.setDirect(MsgDirectionEnum.Out);
1379  msg.setStatus(MsgStatusEnum.sending);
1380  msg.setSessionType(sessionType);
1381  msg.setTime(TimeUtil.currentTimeMillis());
1382 
1383  return msg;
1384  }
1385 
1406  public static String createForwardMessageListFileDetail(List<? extends IMMessage> messages) {
1407  if (messages == null || messages.isEmpty()) {
1408  return "";
1409  }
1410  final String sessionId = messages.get(0).getSessionId();
1411  if (sessionId==null) {
1412  return "";
1413  }
1414  List<IMMessage> msgList = new ArrayList<>(messages.size());
1415  for (IMMessage msg : messages) {
1416  // 不是来自同一会话,不添加
1417  if (!sessionId.equals(msg.getSessionId())){
1418  continue;
1419  }
1420  // 不是可以转发的类型,不添加
1421  if (msg.getMsgType() == MsgTypeEnum.notification || msg.getMsgType() == MsgTypeEnum.avchat || msg.getMsgType() == MsgTypeEnum.robot) {
1422  continue;
1423  }
1424  msgList.add(msg);
1425  }
1426  return buildHeader(0, msgList.size()) + "\n" + buildBody(msgList);
1427  }
1428 
1436  private static String buildHeader(int version, int message_count) {
1437  JSONObject obj = new JSONObject();
1438  try {
1439  obj.put("version", version);
1440  //终端类型:Android
1441  obj.put("terminal", IAuthService.ClientType.Android);
1442  obj.put("sdk_version", BuildConfig.VERSION_NAME);
1443  obj.put("app_version", BuildConfig.VERSION_CODE);
1444  obj.put("message_count", message_count);
1445  } catch (JSONException e) {
1446  e.printStackTrace();
1447  }
1448  return obj.toString();
1449  }
1450 
1457  private static String buildBody(@NonNull List<IMMessage> msgList) {
1458  String enter = "\n";
1459  if (msgList.isEmpty()) {
1460  return "";
1461  }
1462  StringBuilder stringBuilder = new StringBuilder();
1463  for (IMMessage msg : msgList) {
1464  stringBuilder.append(enter).append(MessageConvert.convertMessageToJson(msg));
1465  }
1466  return stringBuilder.substring(enter.length());
1467  }
1468 
1469 
1490  public static IMMessage createFromJson(String json){
1491  if (TextUtils.isEmpty(json)) {
1492  return null;
1493  }
1494  return MessageConvert.convertJsonToMessage(json);
1495  }
1496 
1517  public static String convertMessageToJson(IMMessage msg) {
1518  if (msg == null) {
1519  return null;
1520  }
1521  return MessageConvert.convertMessageToJson(msg);
1522  }
1523 
1552  @androidx.annotation.NonNull
1553  public static ImageAttachment createImageAttachment(File file, String displayName, String nosTokenSceneKey) {
1554  final ImageAttachment attachment = new ImageAttachment();
1555  attachment.setPath(file.getPath());
1556  attachment.setSize(file.length());
1557  int[] dimension = BitmapDecoder.decodeBound(file);
1558  attachment.setWidth(dimension[0]);
1559  attachment.setHeight(dimension[1]);
1560  attachment.setDisplayName(displayName);
1561  attachment.setExtension(StringUtil.getExtension(file.getName()));
1562  attachment.setNosTokenSceneKey(nosTokenSceneKey);
1563  return attachment;
1564  }
1565 
1598  @androidx.annotation.NonNull
1599  public static ImageAttachment createImageAttachment(Context context, Uri uri, String displayName, String nosTokenSceneKey) {
1600  final ImageAttachment attachment = new ImageAttachment();
1601  attachment.setUri(uri);
1602  attachment.setSize(UriUtils.getFileSizeFromUri(context, uri));
1603  int[] dimension = BitmapDecoder.decodeBound(context, uri);
1604  attachment.setWidth(dimension[0]);
1605  attachment.setHeight(dimension[1]);
1606  attachment.setDisplayName(displayName);
1607  attachment.setExtension(UriUtils.getFileExtensionFromUri(context, uri));
1608  attachment.setNosTokenSceneKey(nosTokenSceneKey);
1609  return attachment;
1610  }
1611 
1640  @androidx.annotation.NonNull
1641  public static AudioAttachment createAudioAttachment(File file, long duration, String nosTokenSceneKey) {
1642  final AudioAttachment attachment = new AudioAttachment();
1643  attachment.setPath(file.getPath());
1644  attachment.setSize(file.length());
1645  attachment.setDuration(duration);// ms
1646  attachment.setExtension(StringUtil.getExtension(file.getName()));
1647  attachment.setNosTokenSceneKey(nosTokenSceneKey);
1648  return attachment;
1649  }
1650 
1683  @androidx.annotation.NonNull
1684  public static AudioAttachment createAudioAttachment(Context context, Uri uri, long duration, String nosTokenSceneKey) {
1685  final AudioAttachment attachment = new AudioAttachment();
1686  attachment.setUri(uri);
1687  attachment.setSize(UriUtils.getFileSizeFromUri(context, uri));
1688  attachment.setDuration(duration);// ms
1689  attachment.setExtension(UriUtils.getFileExtensionFromUri(context, uri));
1690  attachment.setNosTokenSceneKey(nosTokenSceneKey);
1691  return attachment;
1692  }
1693 
1734  @androidx.annotation.NonNull
1735  public static VideoAttachment createVideoAttachment(File file, long duration, int width, int height, String displayName, String nosTokenSceneKey) {
1736  final VideoAttachment attachment = new VideoAttachment();
1737  attachment.setPath(file.getPath());
1738  attachment.setSize(file.length());
1739  attachment.setDuration(duration);
1740  attachment.setWidth(width);
1741  attachment.setHeight(height);
1742  attachment.setDisplayName(displayName);
1743  attachment.setExtension(StringUtil.getExtension(file.getName()));
1744  attachment.setNosTokenSceneKey(nosTokenSceneKey);
1745  return attachment;
1746  }
1747 
1792  @androidx.annotation.NonNull
1793  public static VideoAttachment createVideoAttachment(Context context, Uri uri, long duration, int width, int height, String displayName,
1794  String nosTokenSceneKey) {
1795  final VideoAttachment attachment = new VideoAttachment();
1796  attachment.setUri(uri);
1797  attachment.setSize(UriUtils.getFileSizeFromUri(context, uri));
1798  attachment.setDuration(duration);
1799  attachment.setWidth(width);
1800  attachment.setHeight(height);
1801  attachment.setDisplayName(displayName);
1802  attachment.setExtension(UriUtils.getFileExtensionFromUri(context, uri));
1803  attachment.setNosTokenSceneKey(nosTokenSceneKey);
1804  return attachment;
1805  }
1806 
1835  @androidx.annotation.NonNull
1836  public static FileAttachment createFileAttachment(File file, String displayName, String nosTokenSceneKey) {
1837  final FileAttachment attachment = new FileAttachment();
1838  attachment.setPath(file.getPath());
1839  attachment.setSize(file.length());
1840  attachment.setDisplayName(displayName);
1841  attachment.setExtension(StringUtil.getExtension(file.getName()));
1842  attachment.setNosTokenSceneKey(nosTokenSceneKey);
1843  return attachment;
1844  }
1845 
1878  @androidx.annotation.NonNull
1879  public static FileAttachment createFileAttachment(Context context, Uri uri, String displayName, String nosTokenSceneKey) {
1880  final FileAttachment attachment = new FileAttachment();
1881  attachment.setUri(uri);
1882  attachment.setSize(UriUtils.getFileSizeFromUri(context, uri));
1883  attachment.setDisplayName(displayName);
1884  attachment.setExtension(UriUtils.getFileExtensionFromUri(context, uri));
1885  attachment.setNosTokenSceneKey(nosTokenSceneKey);
1886  return attachment;
1887  }
1888 }
String getUrl()
获取文件在服务器上的下载url。若文件还未上传,返回null
void setHeight(int height)
设置视频的高度
static IMMessage createNrtcNetcallMessage(String sessionId, SessionTypeEnum sessionType, MsgAttachment netCallAttachment)
创建一条通话记录消息。
.annotation.NonNull static FileAttachment createFileAttachment(Context context, Uri uri, String displayName, String nosTokenSceneKey)
创建文件附件。用于上传文件。
.annotation.NonNull static AudioAttachment createAudioAttachment(Context context, Uri uri, long duration, String nosTokenSceneKey)
创建音频附件。用于上传音频文件。
.annotation.NonNull static FileAttachment createFileAttachment(File file, String displayName, String nosTokenSceneKey)
创建文件附件。用于上传文件。
static IMMessage createAudioMessage(String sessionId, SessionTypeEnum sessionType, File file, long duration, String nosTokenSceneKey)
创建一条语音消息。
static IMMessage createAudioMessage(Context context, String sessionId, SessionTypeEnum sessionType, Uri uri, long duration, String nosTokenSceneKey)
创建一条语音消息。
static long getFileSizeFromUri(Context context, Uri uri)
从URI中获取文件的实际大小
Definition: UriUtils.java:190
void setExtension(String extension)
设置文件后缀名
boolean setUri(Uri uri)
设置文件uri, 仅支持ContentResolver.SCHEME_FILE类型和ContentResolver.SCHEME_CONTENT类型的uri 仅支持发...
.annotation.NonNull static VideoAttachment createVideoAttachment(File file, long duration, int width, int height, String displayName, String nosTokenSceneKey)
创建视频附件。用于上传视频文件。
云信 IM 消息构造器,提供构建各类型消息的接口。
static IMMessage createCustomMessage(String sessionId, SessionTypeEnum sessionType, MsgAttachment attachment)
创建一条自定义消息。
static IMMessage createFileMessage(Context context, String sessionId, SessionTypeEnum sessionType, Uri uri, String displayName, String nosTokenSceneKey)
创建一条文件消息。
static IMMessage createCustomMessage(String sessionId, SessionTypeEnum sessionType, String content, MsgAttachment attachment)
创建一条自定义消息。
static IMMessage createCustomMessage(String sessionId, SessionTypeEnum sessionType, String content, MsgAttachment attachment, CustomMessageConfig config)
创建一条自定义消息。
带有文件的附件类型的基类 描述文件的相关信息
NIM消息实体数据结构。 第三方APP不要调用设置类接口,调用之后不会被持久化
Definition: IMMessage.java:10
消息本身发送/接收状态,附件状态见AttachStatusEnum
static IMMessage createVideoMessage(String sessionId, SessionTypeEnum sessionType, File file, long duration, int width, int height, String displayName, String nosTokenSceneKey)
创建一条视频消息。
static IMMessage createImageMessage(String sessionId, SessionTypeEnum sessionType, File file)
创建一条图片消息。
static IMMessage createFileMessage(String sessionId, SessionTypeEnum sessionType, File file, String displayName, String nosTokenSceneKey)
创建一条文件消息。
static IMMessage createAudioMessage(Context context, String sessionId, SessionTypeEnum sessionType, Uri uri, long duration)
创建一条语音消息。
static IMMessage createEmptyMessage(String sessionId, SessionTypeEnum sessionType, long time)
创建一条空消息。
.annotation.NonNull static ImageAttachment createImageAttachment(Context context, Uri uri, String displayName, String nosTokenSceneKey)
创建图片附件,用于上传图片文件。
static IMMessage createLocationMessage(String sessionId, SessionTypeEnum sessionType, double lat, double lng, String addr)
创建一条地理位置消息。
.annotation.NonNull static AudioAttachment createAudioAttachment(File file, long duration, String nosTokenSceneKey)
创建音频附件。用于上传音频文件。
.annotation.NonNull static VideoAttachment createVideoAttachment(Context context, Uri uri, long duration, int width, int height, String displayName, String nosTokenSceneKey)
创建视频附件。用于上传视频文件。
void setFromAccount(String account)
设置说话方的帐号。消息方向getDirect()根据改之
static String createForwardMessageListFileDetail(List<? extends IMMessage > messages)
创建多条待合并转发的消息。
void setPath(String path)
设置文件路径
.annotation.NonNull static ImageAttachment createImageAttachment(File file, String displayName, String nosTokenSceneKey)
创建图片附件,用于上传图片文件。
static IMMessage createImageMessage(Context context, String sessionId, SessionTypeEnum sessionType, Uri uri, String displayName, String nosTokenSceneKey)
创建一条图片消息。
void initSend(String robotAccount, String type, String content, String target, String params)
static IMMessage createVideoMessage(String sessionId, SessionTypeEnum sessionType, File file, long duration, int width, int height, String displayName)
创建一条视频消息。
static IMMessage createAudioMessage(String sessionId, SessionTypeEnum sessionType, File file, long duration)
创建一条语音消息。
static IMMessage createImageMessage(String sessionId, SessionTypeEnum sessionType, File file, String displayName, String nosTokenSceneKey)
创建一条图片消息。
void setNosTokenSceneKey(String nosTokenSceneKey)
设置文件上传时的nos scene
String getThumbPathForSave()
获取用于保存缩略图文件的位置
static IMMessage createImageMessage(Context context, String sessionId, SessionTypeEnum sessionType, Uri uri, String displayName)
创建一条图片消息。
static IMMessage createFileMessage(String sessionId, SessionTypeEnum sessionType, File file, String displayName)
创建一条文件消息。
void setDuration(long duration)
设置音频的播放时长
消息的配置选项,主要用于设定消息的声明周期,是否需要推送,是否需要计入未读数等。
void setDisplayName(String displayName)
设置文件显示名
static String convertMessageToJson(IMMessage msg)
将 IMMessage 对象转换成 JSON 格式的字符串。
void setAddress(String address)
设置地理位置描述信息
static String getFileExtensionFromUri(Context context, Uri uri)
从URI中获取文件的扩展名,如果没有则返回空字符串
Definition: UriUtils.java:160
void setDuration(long duration)
设置视频的播放时长
static IMMessage createTextMessage(String sessionId, SessionTypeEnum sessionType, String text)
创建一条文本消息。
static IMMessage createRobotTextMessage(String sessionId, SessionTypeEnum sessionType, String text, MessageRobotInfo messageRobotInfo)
创建一条机器人普通文本消息。
static IMMessage createFromJson(String json)
创建一条 JSON 消息。
void setWidth(int width)
设置视频的宽度
MsgTypeEnum getMsgType()
获取消息类型。
static IMMessage createImageMessage(Context context, String sessionId, SessionTypeEnum sessionType, Uri uri)
创建一条图片消息。
static IMMessage createFileMessage(Context context, String sessionId, SessionTypeEnum sessionType, Uri uri, String displayName)
创建一条文件消息。
static IMMessage createImageMessage(String sessionId, SessionTypeEnum sessionType, File file, String displayName)
创建一条图片消息。
static IMMessage createRobotMessage(String sessionId, SessionTypeEnum sessionType, String robotAccount, String text, String type, String content, String target, String params)
该方法不推荐使用,请使用 MessageBuilder#createRobotTextMessage 和 MessageBuilder#createRobotTipMessag...
static IMMessage createTipMessage(String sessionId, SessionTypeEnum sessionType)
创建一条提醒消息。
static IMMessage createForwardMessage(IMMessage message, String sessionId, SessionTypeEnum sessionType)
创建一条待转发消息。
static IMMessage createRobotTipMessage(String sessionId, SessionTypeEnum sessionType, MessageRobotInfo messageRobotInfo)
创建一条机器人提醒消息。
void setSize(long size)
设置文件大小,单位为byte
static IMMessage createCustomMessage(String sessionId, SessionTypeEnum sessionType, String content, MsgAttachment attachment, CustomMessageConfig config, String nosTokenSceneKey)
创建一条自定义消息。