message.java 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. @Override
  2. public void onRecvNewMessage(V2TIMMessage msg) {
  3. int elemType = msg.getElemType();
  4. if (elemType == V2TIMMessage.V2TIM_ELEM_TYPE_TEXT) {
  5. // 文本消息
  6. V2TIMTextElem v2TIMTextElem = msg.getTextElem();
  7. String text = v2TIMTextElem.getText();
  8. } else if (elemType == V2TIMMessage.V2TIM_ELEM_TYPE_CUSTOM) {
  9. // 自定义消息
  10. V2TIMCustomElem v2TIMCustomElem = msg.getCustomElem();
  11. byte[] customData = v2TIMCustomElem.getData();
  12. } else if (elemType == V2TIMMessage.V2TIM_ELEM_TYPE_IMAGE) {
  13. // 图片消息
  14. V2TIMImageElem v2TIMImageElem = msg.getImageElem();
  15. // 一个图片消息会包含三种格式大小的图片,分别为原图、大图、微缩图(SDK 会在发送图片消息的时候自动生成微缩图、大图,客户不需要关心)
  16. // 大图:是将原图等比压缩,压缩后宽、高中较小的一个等于720像素。
  17. // 缩略图:是将原图等比压缩,压缩后宽、高中较小的一个等于198像素。
  18. List<V2TIMImageElem.V2TIMImage> imageList = v2TIMImageElem.getImageList();
  19. for (V2TIMImageElem.V2TIMImage v2TIMImage : imageList) {
  20. // 图片 ID,内部标识,可用于外部缓存 key
  21. String uuid = v2TIMImage.getUUID();
  22. // 图片类型
  23. int imageType = v2TIMImage.getType();
  24. // 图片大小(字节)
  25. int size = v2TIMImage.getSize();
  26. // 图片宽度
  27. int width = v2TIMImage.getWidth();
  28. // 图片高度
  29. int height = v2TIMImage.getHeight();
  30. // 设置图片下载路径 imagePath,这里可以用 uuid 作为标识,避免重复下载
  31. String imagePath = "/sdcard/im/image/" + "myUserID" + uuid;
  32. File imageFile = new File(imagePath);
  33. // 判断 imagePath 下有没有已经下载过的图片文件
  34. if (!imageFile.exists()) {
  35. // 下载图片
  36. v2TIMImage.downloadImage(imagePath, new V2TIMDownloadCallback() {
  37. @Override
  38. public void onProgress(V2TIMElem.V2ProgressInfo progressInfo) {
  39. // 下载进度回调:已下载大小 v2ProgressInfo.getCurrentSize();总文件大小 v2ProgressInfo.getTotalSize()
  40. }
  41. @Override
  42. public void onError(int code, String desc) {
  43. // 下载失败
  44. }
  45. @Override
  46. public void onSuccess() {
  47. // 下载完成
  48. }
  49. });
  50. } else {
  51. // 图片已存在
  52. }
  53. }
  54. } else if (elemType == V2TIMMessage.V2TIM_ELEM_TYPE_SOUND) {
  55. // 语音消息
  56. V2TIMSoundElem v2TIMSoundElem = msg.getSoundElem();
  57. // 语音 ID,内部标识,可用于外部缓存 key
  58. String uuid = v2TIMSoundElem.getUUID();
  59. // 语音文件大小
  60. int dataSize = v2TIMSoundElem.getDataSize();
  61. // 语音时长
  62. int duration = v2TIMSoundElem.getDuration();
  63. // 设置语音文件路径 soundPath,这里可以用 uuid 作为标识,避免重复下载
  64. String soundPath = "/sdcard/im/sound/" + "myUserID" + uuid;
  65. File imageFile = new File(soundPath);
  66. // 判断 soundPath 下有没有已经下载过的语音文件
  67. if (!imageFile.exists()) {
  68. v2TIMSoundElem.downloadSound(soundPath, new V2TIMDownloadCallback() {
  69. @Override
  70. public void onProgress(V2TIMElem.V2ProgressInfo progressInfo) {
  71. // 下载进度回调:已下载大小 v2ProgressInfo.getCurrentSize();总文件大小 v2ProgressInfo.getTotalSize()
  72. }
  73. @Override
  74. public void onError(int code, String desc) {
  75. // 下载失败
  76. }
  77. @Override
  78. public void onSuccess() {
  79. // 下载完成
  80. }
  81. });
  82. } else {
  83. // 文件已存在
  84. }
  85. } else if (elemType == V2TIMMessage.V2TIM_ELEM_TYPE_VIDEO) {
  86. // 视频消息
  87. V2TIMVideoElem v2TIMVideoElem = msg.getVideoElem();
  88. // 视频截图 ID,内部标识,可用于外部缓存 key
  89. String snapshotUUID = v2TIMVideoElem.getSnapshotUUID();
  90. // 视频截图文件大小
  91. int snapshotSize = v2TIMVideoElem.getSnapshotSize();
  92. // 视频截图宽
  93. int snapshotWidth = v2TIMVideoElem.getSnapshotWidth();
  94. // 视频截图高
  95. int snapshotHeight = v2TIMVideoElem.getSnapshotHeight();
  96. // 视频 ID,内部标识,可用于外部缓存 key
  97. String videoUUID = v2TIMVideoElem.getVideoUUID();
  98. // 视频文件大小
  99. int videoSize = v2TIMVideoElem.getVideoSize();
  100. // 视频时长
  101. int duration = v2TIMVideoElem.getDuration();
  102. // 设置视频截图文件路径,这里可以用 uuid 作为标识,避免重复下载
  103. String snapshotPath = "/sdcard/im/snapshot/" + "myUserID" + snapshotUUID;
  104. File snapshotFile = new File(snapshotPath);
  105. if (!snapshotFile.exists()) {
  106. v2TIMVideoElem.downloadSnapshot(snapshotPath, new V2TIMDownloadCallback() {
  107. @Override
  108. public void onProgress(V2TIMElem.V2ProgressInfo progressInfo) {
  109. // 下载进度回调:已下载大小 v2ProgressInfo.getCurrentSize();总文件大小 v2ProgressInfo.getTotalSize()
  110. }
  111. @Override
  112. public void onError(int code, String desc) {
  113. // 下载失败
  114. }
  115. @Override
  116. public void onSuccess() {
  117. // 下载完成
  118. }
  119. });
  120. } else {
  121. // 文件已存在
  122. }
  123. // 设置视频文件路径,这里可以用 uuid 作为标识,避免重复下载
  124. String videoPath = "/sdcard/im/video/" + "myUserID" + snapshotUUID;
  125. File videoFile = new File(videoPath);
  126. if (!snapshotFile.exists()) {
  127. v2TIMVideoElem.downloadSnapshot(videoPath, new V2TIMDownloadCallback() {
  128. @Override
  129. public void onProgress(V2TIMElem.V2ProgressInfo progressInfo) {
  130. // 下载进度回调:已下载大小 v2ProgressInfo.getCurrentSize();总文件大小 v2ProgressInfo.getTotalSize()
  131. }
  132. @Override
  133. public void onError(int code, String desc) {
  134. // 下载失败
  135. }
  136. @Override
  137. public void onSuccess() {
  138. // 下载完成
  139. }
  140. });
  141. } else {
  142. // 文件已存在
  143. }
  144. } else if (elemType == V2TIMMessage.V2TIM_ELEM_TYPE_FILE) {
  145. // 文件消息
  146. V2TIMFileElem v2TIMFileElem = msg.getFileElem();
  147. // 文件 ID,内部标识,可用于外部缓存 key
  148. String uuid = v2TIMFileElem.getUUID();
  149. // 文件名称
  150. String fileName = v2TIMFileElem.getFileName();
  151. // 文件大小
  152. int fileSize = v2TIMFileElem.getFileSize();
  153. // 设置文件路径,这里可以用 uuid 作为标识,避免重复下载
  154. String filePath = "/sdcard/im/file/" + "myUserID" + uuid;
  155. File file = new File(filePath);
  156. if (!file.exists()) {
  157. v2TIMFileElem.downloadFile(filePath, new V2TIMDownloadCallback() {
  158. @Override
  159. public void onProgress(V2TIMElem.V2ProgressInfo progressInfo) {
  160. // 下载进度回调:已下载大小 v2ProgressInfo.getCurrentSize();总文件大小 v2ProgressInfo.getTotalSize()
  161. }
  162. @Override
  163. public void onError(int code, String desc) {
  164. // 下载失败
  165. }
  166. @Override
  167. public void onSuccess() {
  168. // 下载完成
  169. }
  170. });
  171. } else {
  172. // 文件已存在
  173. }
  174. } else if (elemType == V2TIMMessage.V2TIM_ELEM_TYPE_LOCATION) {
  175. // 地理位置消息
  176. V2TIMLocationElem v2TIMLocationElem = msg.getLocationElem();
  177. // 地理位置信息描述
  178. String desc = v2TIMLocationElem.getDesc();
  179. // 经度
  180. double longitude = v2TIMLocationElem.getLongitude();
  181. // 纬度
  182. double latitude = v2TIMLocationElem.getLatitude();
  183. } else if (elemType == V2TIMMessage.V2TIM_ELEM_TYPE_FACE) {
  184. // 表情消息
  185. V2TIMFaceElem v2TIMFaceElem = msg.getFaceElem();
  186. // 表情所在的位置
  187. int index = v2TIMFaceElem.getIndex();
  188. // 表情自定义数据
  189. byte[] data = v2TIMFaceElem.getData();
  190. } else if (elemType == V2TIMMessage.V2TIM_ELEM_TYPE_GROUP_TIPS) {
  191. // 群 tips 消息
  192. V2TIMGroupTipsElem v2TIMGroupTipsElem = msg.getGroupTipsElem();
  193. // 所属群组
  194. String groupId = v2TIMGroupTipsElem.getGroupID();
  195. // 群Tips类型
  196. int type = v2TIMGroupTipsElem.getType();
  197. // 操作人资料
  198. V2TIMGroupMemberInfo opMember = v2TIMGroupTipsElem.getOpMember();
  199. // 被操作人资料
  200. List<V2TIMGroupMemberInfo> memberList = v2TIMGroupTipsElem.getMemberList();
  201. // 群信息变更详情
  202. List<V2TIMGroupChangeInfo> groupChangeInfoList = v2TIMGroupTipsElem.getGroupChangeInfoList();
  203. // 群成员变更信息
  204. List<V2TIMGroupMemberChangeInfo> memberChangeInfoList v2TIMGroupTipsElem.getMemberChangeInfoList();
  205. // 当前群在线人数
  206. int memberCount = v2TIMGroupTipsElem.getMemberCount();
  207. }
  208. }