NIMSDK-AOS 10.4.0-beta
载入中...
搜索中...
未找到
V2NIMMessageCreator.java
浏览该文件的文档.
1package com.netease.nimlib.sdk.v2.message;
2
3import android.text.TextUtils;
4import com.netease.nimlib.SDKCacheUI;
5import com.netease.nimlib.report.utils.NtpTimeUtil;
6import com.netease.nimlib.sdk.msg.constant.MsgDirectionEnum;
7import com.netease.nimlib.sdk.msg.constant.MsgStatusEnum;
8import com.netease.nimlib.sdk.v2.message.enums.V2NIMMessageType;
9import com.netease.nimlib.sdk.v2.message.model.V2NIMMessageCallDuration;
10import com.netease.nimlib.sdk.v2.storage.V2NIMStorageSceneConfig;
11import com.netease.nimlib.util.StringUtil;
12import com.netease.nimlib.v2.message.impl.V2NIMMessageImpl;
13import com.netease.nimlib.v2.message.impl.attachment.V2NIMMessageAttachmentImpl;
14import com.netease.nimlib.v2.message.impl.attachment.V2NIMMessageAudioAttachmentImpl.V2NIMMessageAudioAttachmentBuilder;
15import com.netease.nimlib.v2.message.impl.attachment.V2NIMMessageCallAttachmentImpl;
16import com.netease.nimlib.v2.message.impl.attachment.V2NIMMessageFileAttachmentImpl.V2NIMMessageFileAttachmentBuilder;
17import com.netease.nimlib.v2.message.impl.attachment.V2NIMMessageImageAttachmentImpl.V2NIMMessageImageAttachmentBuilder;
18import com.netease.nimlib.v2.message.impl.attachment.V2NIMMessageLocationAttachmentImpl;
19import com.netease.nimlib.v2.message.impl.attachment.V2NIMMessageVideoAttachmentImpl.V2NIMMessageVideoAttachmentBuilder;
20import java.util.List;
21
22public class V2NIMMessageCreator {
23
24 private static final String TAG = "V2NIMMessageCreator";
25
26 private static V2NIMMessageImpl createV2Message(V2NIMMessageType messageType) {
27 V2NIMMessageImpl message = new V2NIMMessageImpl();
28 message.setMessageClientId(StringUtil.get32UUID());
29 message.setMessageType(messageType);
30 message.setCreateTime(NtpTimeUtil.getServerNow());
31 return message;
32 }
33
34 /**
35 * 构造文本消息
36 *
37 * @param text 需要发送的文本内容
38 * @return V2NIMMessage
39 */
40 public static V2NIMMessage createTextMessage(String text) {
41 V2NIMMessageImpl message = createV2Message(V2NIMMessageType.V2NIM_MESSAGE_TYPE_TEXT);
42 message.setText(text);
43 return message;
44 }
45
46 /**
47 * 构造图片消息
48 *
49 * @param imagePath 图片文件地址
50 * @param name 文件显示名称
51 * @param sceneName 文件存储场景名
52 * @param width 图片文件宽度
53 * @param height 图片文件高度
54 * @return V2NIMMessage
55 */
56 public static V2NIMMessage createImageMessage(String imagePath, String name, String sceneName, Integer width, Integer height) {
57 V2NIMMessageImpl message = createV2Message(V2NIMMessageType.V2NIM_MESSAGE_TYPE_IMAGE);
58
59 V2NIMMessageImageAttachmentBuilder builder = V2NIMMessageImageAttachmentBuilder.builder();
60 if (!TextUtils.isEmpty(imagePath)) {
61 builder.withPath(imagePath);
62 }
63 if (!TextUtils.isEmpty(name)) {
64 builder.withName(name);
65 }
66 if (!TextUtils.isEmpty(sceneName)) {
67 builder.withSceneName(sceneName);
68 } else {
69 builder.withSceneName(V2NIMStorageSceneConfig.DEFAULT_IM.getSceneName());
70 }
71 if (width != null) {
72 builder.withWidth(width);
73 }
74 if (height != null) {
75 builder.withHeight(height);
76 }
77 message.setAttachment(builder.build());
78
79 return message;
80 }
81
82 /**
83 * 构造语音消息
84 *
85 * @param audioPath 视频文件地址
86 * @param name 视频文件显示名称
87 * @param sceneName 文件存储场景名
88 * 自定义场景使用之前, 需要先调用V2NIMStorageService.addCustomStorageScene新增自定义场景值
89 * 传空默认使用:V2NIMStorageSceneConfig.DEFAULT_IM
90 * @param duration 语音文件播放长度
91 * @return V2NIMMessage
92 */
93 public static V2NIMMessage createAudioMessage(String audioPath, String name, String sceneName, Integer duration) {
94 V2NIMMessageImpl message = createV2Message(V2NIMMessageType.V2NIM_MESSAGE_TYPE_AUDIO);
95
96 V2NIMMessageAudioAttachmentBuilder builder = V2NIMMessageAudioAttachmentBuilder.builder();
97 if (!TextUtils.isEmpty(audioPath)) {
98 builder.withPath(audioPath);
99 }
100 if (!TextUtils.isEmpty(name)) {
101 builder.withName(name);
102 }
103 if (!TextUtils.isEmpty(sceneName)) {
104 builder.withSceneName(sceneName);
105 } else {
106 builder.withSceneName(V2NIMStorageSceneConfig.DEFAULT_IM.getSceneName());
107 }
108 if (duration != null) {
109 builder.withDuration(duration);
110 }
111 message.setAttachment(builder.build());
112
113 return message;
114 }
115
116 /**
117 * 构造视频消息
118 *
119 * @param videoPath 视频文件地址
120 * @param name 视频文件显示名称
121 * @param sceneName 文件存储场景名
122 * 自定义场景使用之前, 需要先调用V2NIMStorageService.addCustomStorageScene新增自定义场景值
123 * 传空默认使用:V2NIMStorageSceneConfig.DEFAULT_IM
124 * @param duration 视频文件播放长度
125 * @param width 视频文件宽度
126 * @param height 视频文件高度
127 * @return V2NIMMessage
128 */
129 public static V2NIMMessage createVideoMessage(String videoPath, String name, String sceneName, Integer duration, Integer width, Integer height) {
130 V2NIMMessageImpl message = createV2Message(V2NIMMessageType.V2NIM_MESSAGE_TYPE_VIDEO);
131
132 V2NIMMessageVideoAttachmentBuilder builder = V2NIMMessageVideoAttachmentBuilder.builder();
133 if (!TextUtils.isEmpty(videoPath)) {
134 builder.withPath(videoPath);
135 }
136 if (!TextUtils.isEmpty(name)) {
137 builder.withName(name);
138 }
139 if (!TextUtils.isEmpty(sceneName)) {
140 builder.withSceneName(sceneName);
141 } else {
142 builder.withSceneName(V2NIMStorageSceneConfig.DEFAULT_IM.getSceneName());
143 }
144 if (duration != null) {
145 builder.withDuration(duration);
146 }
147 if (width != null) {
148 builder.withWidth(width);
149 }
150 if (height != null) {
151 builder.withHeight(height);
152 }
153 message.setAttachment(builder.build());
154
155 return message;
156 }
157
158 /**
159 * 构造文件消息
160 *
161 * @param filePath 文件地址
162 * @param name 文件显示名称
163 * @param sceneName 场景名
164 * 自定义场景使用之前, 需要先调用V2NIMStorageService.addCustomStorageScene新增自定义场景值
165 * 传空默认使用:V2NIMStorageSceneConfig.DEFAULT_IM
166 * @return V2NIMMessage
167 */
168 public static V2NIMMessage createFileMessage(String filePath, String name, String sceneName) {
169 V2NIMMessageImpl message = createV2Message(V2NIMMessageType.V2NIM_MESSAGE_TYPE_FILE);
170
171 V2NIMMessageFileAttachmentBuilder builder = V2NIMMessageFileAttachmentBuilder.builder();
172 if (!TextUtils.isEmpty(filePath)) {
173 builder.withPath(filePath);
174 }
175 if (!TextUtils.isEmpty(name)) {
176 builder.withName(name);
177 }
178 if (!TextUtils.isEmpty(sceneName)) {
179 builder.withSceneName(sceneName);
180 } else {
181 builder.withSceneName(V2NIMStorageSceneConfig.DEFAULT_IM.getSceneName());
182 }
183 message.setAttachment(builder.build());
184
185 return message;
186 }
187
188 /**
189 * 构造地理位置消息
190 *
191 * @param latitude 纬度
192 * @param longitude 经度
193 * @param address 详细位置信息
194 * @return V2NIMMessage
195 */
196 public static V2NIMMessage createLocationMessage(double latitude, double longitude, String address) {
197 V2NIMMessageImpl message = createV2Message(V2NIMMessageType.V2NIM_MESSAGE_TYPE_LOCATION);
198
199 V2NIMMessageLocationAttachmentImpl locationAttachment = new V2NIMMessageLocationAttachmentImpl(latitude, longitude, address);
200 message.setAttachment(locationAttachment);
201
202 return message;
203 }
204
205 /**
206 * 构造自定义消息消息
207 *
208 * @param text 需要发送的文本内容
209 * @param rawAttachment 需要发送的附件
210 * @return V2NIMMessage
211 */
212 public static V2NIMMessage createCustomMessage(String text, String rawAttachment) {
213 V2NIMMessageImpl message = createV2Message(V2NIMMessageType.V2NIM_MESSAGE_TYPE_CUSTOM);
214 message.setText(text);
215 message.setAttachment(new V2NIMMessageAttachmentImpl(rawAttachment));
216 return message;
217 }
218
219 /**
220 * 构造转发消息,消息内容与原消息一样
221 * 转发消息类型不能为:V2NIM_MESSAGE_TYPE_NOTIFICATION,V2NIM_MESSAGE_TYPE_ROBOT,V2NIM_MESSAGE_TYPE_TIP,V2NIM_MESSAGE_TYPE_AVCHAT
222 * 转发的消息消息必须为发送成功的消息
223 *
224 * @param message 需要转发的消息体
225 * @return V2NIMMessage
226 */
228 if (!(message instanceof V2NIMMessageImpl)) {
229 return null;
230 }
231
236 return null;
237 }
238
239// if (((V2NIMMessageImpl) message).getServerIdV1() <= 0) {
240// NimLog.w(TAG, "invalid serverId:" + ((V2NIMMessageImpl) message).getServerIdV1());
241// return null;
242// }
243
244 V2NIMMessageImpl deepClone = ((V2NIMMessageImpl) message).deepClone();
245 if (deepClone == null) {
246 return null;
247 }
248
249 V2NIMMessageImpl forward = createV2Message(deepClone.getMessageType());
250 forward.setSenderId(SDKCacheUI.getAccount());
251 forward.setDirect(MsgDirectionEnum.Out);
252 forward.setStatus(MsgStatusEnum.sending);
253 forward.setText(deepClone.getText());
254 forward.setServerExtension(deepClone.getServerExtension());
255 forward.setLocalExtension(deepClone.getLocalExtension());
256 forward.setSubType(deepClone.getSubType());
257 forward.setAttachment(deepClone.getAttachment());
258
259
260 return forward;
261 }
262
263 /**
264 * 构造提示消息
265 *
266 * @param text 提示内容
267 * @return V2NIMMessage
268 */
269 public static V2NIMMessage createTipsMessage(String text) {
270 V2NIMMessageImpl message = createV2Message(V2NIMMessageType.V2NIM_MESSAGE_TYPE_TIPS);
271 message.setText(text);
272 return message;
273 }
274
275 /**
276 * 构造话单消息
277 * @param type 话单类型, 业务自定义,内容不校验
278 * 建议:
279 * 音频:1
280 * 视频:2
281 * @param channelId 话单频道ID, 内容不校验
282 * @param status 通话状态,业务自定义状态, 内容不校验
283 * 建议:
284 * 通话完成:1
285 * 通话取消:2
286 * 通话拒绝:3
287 * 超时未接听:4
288 * 对方忙: 5
289 * @param durations 通话成员时长列表, 内容不校验
290 * @param text 话单描述
291 * @return V2NIMMessage
292 */
293 public static V2NIMMessage createCallMessage(int type, String channelId, int status, List<V2NIMMessageCallDuration> durations, String text) {
294 V2NIMMessageImpl message = createV2Message(V2NIMMessageType.V2NIM_MESSAGE_TYPE_CALL);
295 message.setText(text);
296 V2NIMMessageCallAttachmentImpl callAttachment = new V2NIMMessageCallAttachmentImpl(type, channelId, status, durations);
297 message.setAttachment(callAttachment);
298 return message;
299 }
300}
static V2NIMMessage createLocationMessage(double latitude, double longitude, String address)
构造地理位置消息
static V2NIMMessage createCallMessage(int type, String channelId, int status, List< V2NIMMessageCallDuration > durations, String text)
构造话单消息
static V2NIMMessage createTextMessage(String text)
构造文本消息
static V2NIMMessage createImageMessage(String imagePath, String name, String sceneName, Integer width, Integer height)
构造图片消息
static V2NIMMessage createFileMessage(String filePath, String name, String sceneName)
构造文件消息
static V2NIMMessage createCustomMessage(String text, String rawAttachment)
构造自定义消息消息
static V2NIMMessage createAudioMessage(String audioPath, String name, String sceneName, Integer duration)
构造语音消息
static V2NIMMessage createTipsMessage(String text)
构造提示消息
static V2NIMMessage createVideoMessage(String videoPath, String name, String sceneName, Integer duration, Integer width, Integer height)
构造视频消息
static V2NIMMessage createForwardMessage(V2NIMMessage message)
构造转发消息,消息内容与原消息一样 转发消息类型不能为:V2NIM_MESSAGE_TYPE_NOTIFICATION,V2NIM_MESSAGE_TYPE_ROBOT,V2NIM_MESSAGE_TY...
static final V2NIMStorageScene DEFAULT_IM
默认文件类型等场景 默认不过期
消息本身发送/接收状态,附件状态见AttachStatusEnum
V2NIMMessageType getMessageType()
获取消息类型