/** * 消息重发 * * @param msg * @return */ public static long reSendECMessage(ECMessage msg) { ECChatManager manager = getInstance().mChatManager; if (manager != null) { // 调用接口发送IM消息 String oldMsgId = msg.getMsgId(); manager.sendMessage(msg, getInstance().mListener); if (msg.getType() == ECMessage.Type.IMAGE) { ImgInfo imgInfo = ImgInfoSqlManager.getInstance().getImgInfo(oldMsgId); if (imgInfo == null || TextUtils.isEmpty(imgInfo.getBigImgPath())) { return -1; } String bigImagePath = new File(FileAccessor.getImagePathName(), imgInfo.getBigImgPath()).getAbsolutePath(); imgInfo.setMsglocalid(msg.getMsgId()); ECFileMessageBody body = (ECFileMessageBody) msg.getBody(); body.setLocalUrl(bigImagePath); BitmapFactory.Options options = DemoUtils.getBitmapOptions( new File(FileAccessor.IMESSAGE_IMAGE, imgInfo.getThumbImgPath()).getAbsolutePath()); msg.setUserData( "outWidth://" + options.outWidth + ",outHeight://" + options.outHeight + ",THUMBNAIL://" + msg.getMsgId()); ImgInfoSqlManager.getInstance().updateImageInfo(imgInfo); } // 保存发送的消息到数据库 return IMessageSqlManager.changeResendMsg(msg.getId(), msg); } return -1; }
private synchronized void postDowloadMessageResult(ECMessage message) { if (message == null) { return; } if (message.getType() == ECMessage.Type.VOICE) { ECVoiceMessageBody voiceBody = (ECVoiceMessageBody) message.getBody(); voiceBody.setDuration(DemoUtils.calculateVoiceTime(voiceBody.getLocalUrl())); } else if (message.getType() == ECMessage.Type.IMAGE) { ImgInfo thumbImgInfo = ImgInfoSqlManager.getInstance().getThumbImgInfo(message); if (thumbImgInfo == null) { return; } ImgInfoSqlManager.getInstance().insertImageInfo(thumbImgInfo); BitmapFactory.Options options = DemoUtils.getBitmapOptions( new File(FileAccessor.getImagePathName(), thumbImgInfo.getThumbImgPath()) .getAbsolutePath()); message.setUserData( "outWidth://" + options.outWidth + ",outHeight://" + options.outHeight + ",THUMBNAIL://" + message.getMsgId() + ",PICGIF://" + thumbImgInfo.isGif); } if (IMessageSqlManager.updateIMessageDownload(message) <= 0) { return; } if (mOnMessageReportCallback != null) { mOnMessageReportCallback.onMessageReport(null, message); } boolean showNotice = true; SyncMsgEntry remove = syncMessage.remove(message.getMsgId()); if (remove != null) { showNotice = remove.showNotice; if (mOnMessageReportCallback != null && remove.msg != null) { ArrayList<ECMessage> msgs = new ArrayList<ECMessage>(); msgs.add(remove.msg); mOnMessageReportCallback.onPushMessage(remove.msg.getSessionId(), msgs); } } if (showNotice) showNotification(message); }
private static void showNotification(ECMessage msg) { if (checkNeedNotification(msg.getSessionId())) { ECNotificationManager.getInstance().forceCancelNotification(); String lastMsg = ""; if (msg.getType() == ECMessage.Type.TXT) { lastMsg = ((ECTextMessageBody) msg.getBody()).getMessage(); } ECContacts contact = ContactSqlManager.getContact(msg.getForm()); if (contact == null) { return; } ECNotificationManager.getInstance() .showCustomNewMessageNotification( CCPAppManager.getContext(), lastMsg, contact.getNickname(), msg.getSessionId(), msg.getType().ordinal()); } }
private void showNotification(ECMessage ecMessage) { CallUpNotificationManager.getInstance().forceCancelNotification(); int userId = Integer.parseInt(ecMessage.getForm()); Friend friend = FriendCache.getInstance(mContext).getFriend(userId); if (friend == null) { return; } CallUpNotificationManager.getInstance() .showCustomNewMessageNotification( BaseInfoUtil.getContext(), friend, ecMessage.getSessionId(), ecMessage.getType().ordinal()); }
@Override public void onSendMessageComplete(ECError error, ECMessage message) { if (message == null) { return; } // 处理ECMessage的发送状态 if (message != null) { if (message.getType() == ECMessage.Type.VOICE) { try { DemoUtils.playNotifycationMusic( CCPAppManager.getContext(), "sound/voice_message_sent.mp3"); } catch (IOException e) { e.printStackTrace(); } } IMessageSqlManager.setIMessageSendStatus( message.getMsgId(), message.getMsgStatus().ordinal()); IMessageSqlManager.notifyMsgChanged(message.getSessionId()); if (mOnMessageReportCallback != null) { mOnMessageReportCallback.onMessageReport(error, message); } return; } }
/** * 处理接收消息 * * @param msg * @param showNotice */ private synchronized void postReceiveMessage(ECMessage msg, boolean showNotice) { // 接收到的IM消息,根据IM消息类型做不同的处理 // IM消息类型:ECMessage.Type if (msg.getType() != ECMessage.Type.TXT) { ECFileMessageBody body = (ECFileMessageBody) msg.getBody(); FileAccessor.initFileAccess(); if (!TextUtils.isEmpty(body.getRemoteUrl())) { boolean thumbnail = false; String fileExt = DemoUtils.getExtensionName(body.getRemoteUrl()); if (msg.getType() == ECMessage.Type.VOICE) { body.setLocalUrl( new File( FileAccessor.getVoicePathName(), DemoUtils.md5(String.valueOf(System.currentTimeMillis())) + ".amr") .getAbsolutePath()); } else if (msg.getType() == ECMessage.Type.IMAGE) { ECImageMessageBody imageBody = (ECImageMessageBody) body; thumbnail = !TextUtils.isEmpty(imageBody.getThumbnailFileUrl()); imageBody.setLocalUrl( new File( FileAccessor.getImagePathName(), DemoUtils.md5( thumbnail ? imageBody.getThumbnailFileUrl() : imageBody.getRemoteUrl()) + "." + fileExt) .getAbsolutePath()); } else { body.setLocalUrl( new File( FileAccessor.getFilePathName(), DemoUtils.md5(String.valueOf(System.currentTimeMillis())) + "." + fileExt) .getAbsolutePath()); } if (syncMessage != null) { syncMessage.put(msg.getMsgId(), new SyncMsgEntry(showNotice, thumbnail, msg)); } if (mChatManager != null) { if (thumbnail) { mChatManager.downloadThumbnailMessage(msg, this); } else { mChatManager.downloadMediaMessage(msg, this); } } if (TextUtils.isEmpty(body.getFileName()) && !TextUtils.isEmpty(body.getRemoteUrl())) { body.setFileName(FileAccessor.getFileName(body.getRemoteUrl())); } msg.setUserData("fileName=" + body.getFileName()); if (IMessageSqlManager.insertIMessage(msg, msg.getDirection().ordinal()) > 0) { return; } } else { LogUtil.e(TAG, "ECMessage fileUrl: null"); } } if (IMessageSqlManager.insertIMessage(msg, msg.getDirection().ordinal()) <= 0) { return; } if (mOnMessageReportCallback != null) { ArrayList<ECMessage> msgs = new ArrayList<ECMessage>(); msgs.add(msg); mOnMessageReportCallback.onPushMessage(msg.getSessionId(), msgs); } // 是否状态栏提示 if (showNotice) showNotification(msg); }