差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
start:200androidcleintintegration:50singlechat [2016/12/23 02:53]
liulj [发送透传消息]
start:200androidcleintintegration:50singlechat [2018/12/12 07:17]
jk 已恢复为旧版 (2018/11/06 11:35)
行 9: 行 9:
 ==== 发送文本消息及表情 ==== ==== 发送文本消息及表情 ====
  
-<sxh java>+<code java>
 //​获取到与聊天人的会话对象。参数username为聊天人的userid或者groupid,后文中的username皆是如此 //​获取到与聊天人的会话对象。参数username为聊天人的userid或者groupid,后文中的username皆是如此
 EMConversation conversation = EMChatManager.getInstance().getConversation(username);​ EMConversation conversation = EMChatManager.getInstance().getConversation(username);​
行 25: 行 25:
 //​发送消息 //​发送消息
 EMChatManager.getInstance().sendMessage(message,​ new EMCallBack(){});​ EMChatManager.getInstance().sendMessage(message,​ new EMCallBack(){});​
-</sxh>+</code>
  
 ==== 发送语音消息 ==== ==== 发送语音消息 ====
  
-<sxh java>+<code java>
 EMConversation conversation = EMChatManager.getInstance().getConversation(username);​ EMConversation conversation = EMChatManager.getInstance().getConversation(username);​
 EMMessage message = EMMessage.createSendMessage(EMMessage.Type.VOICE);​ EMMessage message = EMMessage.createSendMessage(EMMessage.Type.VOICE);​
行 39: 行 39:
 conversation.addMessage(message);​ conversation.addMessage(message);​
 EMChatManager.getInstance().sendMessage(message,​ new EMCallBack(){});​ EMChatManager.getInstance().sendMessage(message,​ new EMCallBack(){});​
-</sxh>+</code>
  
 ==== 发送图片消息 ==== ==== 发送图片消息 ====
  
-<sxh java>+<code java>
 EMConversation conversation = EMChatManager.getInstance().getConversation(username);​ EMConversation conversation = EMChatManager.getInstance().getConversation(username);​
 EMMessage message = EMMessage.createSendMessage(EMMessage.Type.IMAGE);​ EMMessage message = EMMessage.createSendMessage(EMMessage.Type.IMAGE);​
行 56: 行 56:
 conversation.addMessage(message);​ conversation.addMessage(message);​
 EMChatManager.getInstance().sendMessage(message,​ new EMCallBack(){});​ EMChatManager.getInstance().sendMessage(message,​ new EMCallBack(){});​
-</sxh>+</code>
  
 ==== 发送地理位置消息 ==== ==== 发送地理位置消息 ====
  
-<sxh java>+<code java>
 EMConversation conversation = EMChatManager.getInstance().getConversation(username);​ EMConversation conversation = EMChatManager.getInstance().getConversation(username);​
 EMMessage message = EMMessage.createSendMessage(EMMessage.Type.LOCATION);​ EMMessage message = EMMessage.createSendMessage(EMMessage.Type.LOCATION);​
行 70: 行 70:
 conversation.addMessage(message);​ conversation.addMessage(message);​
 EMChatManager.getInstance().sendMessage(message,​ new EMCallBack(){});​ EMChatManager.getInstance().sendMessage(message,​ new EMCallBack(){});​
-</sxh>+</code>
  
 ==== 发送文件消息 ==== ==== 发送文件消息 ====
  
-<sxh java>+<code java>
 EMConversation conversation = EMChatManager.getInstance().getConversation(username);​ EMConversation conversation = EMChatManager.getInstance().getConversation(username);​
 // 创建一个文件消息 // 创建一个文件消息
行 88: 行 88:
 conversation.addMessage(message);​ conversation.addMessage(message);​
 EMChatManager.getInstance().sendMessage(message,​ new EMCallBack(){});​ EMChatManager.getInstance().sendMessage(message,​ new EMCallBack(){});​
-</sxh>+</code>
  
 ==== 发送透传消息 ==== ==== 发送透传消息 ====
行 96: 行 96:
 === 透传消息发送格式 === === 透传消息发送格式 ===
  
-<sxh java>+<code java>
 EMMessage cmdMsg = EMMessage.createSendMessage(EMMessage.Type.CMD);​ EMMessage cmdMsg = EMMessage.createSendMessage(EMMessage.Type.CMD);​
  
行 109: 行 109:
 cmdMsg.addBody(cmdBody); ​ cmdMsg.addBody(cmdBody); ​
 EMChatManager.getInstance().sendMessage(cmdMsg,​ new EMCallBack());​ EMChatManager.getInstance().sendMessage(cmdMsg,​ new EMCallBack());​
-</sxh>+</code>
  
 === CMD 消息广播监听 === === CMD 消息广播监听 ===
  
-<sxh java>+<code java>
     // 注册一个cmd消息的BroadcastReceiver     // 注册一个cmd消息的BroadcastReceiver
  IntentFilter cmdIntentFilter = new IntentFilter(EMChatManager.getInstance().getCmdMessageBroadcastAction());​  IntentFilter cmdIntentFilter = new IntentFilter(EMChatManager.getInstance().getCmdMessageBroadcastAction());​
行 135: 行 135:
  }  }
  };  };
-</sxh>+</code>
 ==== 发送扩展消息 ==== ==== 发送扩展消息 ====
  
 当 SDK 提供的消息类型不满足需求时,开发者可以通过扩展自 SDK 提供的文本、语音、图片、位置等消息类型,从而生成自己需要的消息类型。 当 SDK 提供的消息类型不满足需求时,开发者可以通过扩展自 SDK 提供的文本、语音、图片、位置等消息类型,从而生成自己需要的消息类型。
  
-<sxh java>+<code java>
 //​这里是扩展自文本消息,如果这个自定义的消息需要用到语音或者图片等,可以扩展自语音、图片消息,亦或是位置消息。 //​这里是扩展自文本消息,如果这个自定义的消息需要用到语音或者图片等,可以扩展自语音、图片消息,亦或是位置消息。
 EMMessage message = EMMessage.createSendMessage(EMMessage.Type.TXT);​ EMMessage message = EMMessage.createSendMessage(EMMessage.Type.TXT);​
行 172: 行 172:
  }  }
 } }
-</sxh>+</code>
  
  
行 181: 行 181:
 注意事项:为了防止新消息来时,因为没有注册广播接收者,导致漏接消息的情况,注册完接受者以及好友监听等事件后,需要调用以下 SDK 才会发送新消息的广播,只需调用一次即可,可参考 Demo 的 mainactivity。 注意事项:为了防止新消息来时,因为没有注册广播接收者,导致漏接消息的情况,注册完接受者以及好友监听等事件后,需要调用以下 SDK 才会发送新消息的广播,只需调用一次即可,可参考 Demo 的 mainactivity。
  
-<sxh java>​EMChat.getInstance().setAppInited()</​sxh>+<code java>​EMChat.getInstance().setAppInited()</​code>
  
 另外,当 APP 在后台时,SDK 默认以 notification 的形式通知有新消息,不会走广播,如果需要走广播,可以调用以下 SDK 关闭 notification 通知,这样新消息还是走发送广播的形式。 另外,当 APP 在后台时,SDK 默认以 notification 的形式通知有新消息,不会走广播,如果需要走广播,可以调用以下 SDK 关闭 notification 通知,这样新消息还是走发送广播的形式。
  
-<sxh java>​EMChatManager.getInstance().getChatOptions().setShowNotificationInBackgroud(false)</​sxh>+<code java>​EMChatManager.getInstance().getChatOptions().setShowNotificationInBackgroud(false)</​code>
  
 注册一个相应 broadcast,用来接收消息。 注册一个相应 broadcast,用来接收消息。
  
-<sxh java>+<code java>
 NewMessageBroadcastReceiver msgReceiver = new NewMessageBroadcastReceiver();​ NewMessageBroadcastReceiver msgReceiver = new NewMessageBroadcastReceiver();​
 IntentFilter intentFilter = new IntentFilter(EMChatManager.getInstance().getNewMessageBroadcastAction());​ IntentFilter intentFilter = new IntentFilter(EMChatManager.getInstance().getNewMessageBroadcastAction());​
行 210: 行 210:
         }         }
 } }
-</sxh>+</code>
  
 ==== 通过监听事件来接收新消息 ==== ==== 通过监听事件来接收新消息 ====
行 216: 行 216:
 注意事项:注册消息事件监听,此 listener 会收到所有类型的 event 事件,如果对某种或某些类型的事件感兴趣,可以用 registerEventListener(EMEventListener listener, EMNotifierEvent.EventType[] types)。 注意事项:注册消息事件监听,此 listener 会收到所有类型的 event 事件,如果对某种或某些类型的事件感兴趣,可以用 registerEventListener(EMEventListener listener, EMNotifierEvent.EventType[] types)。
  
-<sxh java>+<code java>
 EMNotifierEvent.Event.EventDeliveryAck;//​已发送回执event注册 EMNotifierEvent.Event.EventDeliveryAck;//​已发送回执event注册
 EMNotifierEvent.Event.EventNewCMDMessage;//​接收透传event注册 EMNotifierEvent.Event.EventNewCMDMessage;//​接收透传event注册
行 223: 行 223:
 EMNotifierEvent.Event.EventReadAck;//​已读回执event注册 EMNotifierEvent.Event.EventReadAck;//​已读回执event注册
 EMNotifierEvent.Event.EventConversationListChanged;//​通知会话列表通知event注册(在某些特殊情况,SDK去删除会话的时候会收到回调监听) EMNotifierEvent.Event.EventConversationListChanged;//​通知会话列表通知event注册(在某些特殊情况,SDK去删除会话的时候会收到回调监听)
-</sxh>+</code>
  
  
 接收所有的 event 事件: 接收所有的 event 事件:
  
-<sxh java>+<code java>
 EMChatManager.getInstance().registerEventListener(new EMEventListener() { EMChatManager.getInstance().registerEventListener(new EMEventListener() {
   
行 237: 行 237:
  }  }
 }); });
-</sxh>+</code>
  
  
 有选择性的接收某些类型 event 事件: 有选择性的接收某些类型 event 事件:
  
-<sxh java>+<code java>
 EMChatManager.getInstance().registerEventListener(new EMEventListener() { EMChatManager.getInstance().registerEventListener(new EMEventListener() {
   
行 252: 行 252:
  }, new EMNotifierEvent.Event[]{EMNotifierEvent.Event.EventNewMessage,​.......}  }, new EMNotifierEvent.Event[]{EMNotifierEvent.Event.EventNewMessage,​.......}
 ); );
-</sxh>+</code>
  
 __**注:广播和监听事件不可同时混用。**__ __**注:广播和监听事件不可同时混用。**__
行 260: 行 260:
 如果不想收到回调,则执行解除监听事件。 如果不想收到回调,则执行解除监听事件。
  
-<sxh java>+<code java>
 EMChatManager.getInstance().unregisterEventListener(new EMEventListener() { EMChatManager.getInstance().unregisterEventListener(new EMEventListener() {
   
行 269: 行 269:
  }  }
 }); });
-</sxh>+</code>
  
 ==== 获取聊天记录 ==== ==== 获取聊天记录 ====
  
-<sxh java>+<code java>
 EMConversation conversation = EMChatManager.getInstance().getConversation(username|groupid);​ EMConversation conversation = EMChatManager.getInstance().getConversation(username|groupid);​
 //​获取此会话的所有消息 //​获取此会话的所有消息
行 282: 行 282:
 //​如果是群聊,调用下面此方法 //​如果是群聊,调用下面此方法
 List<​EMMessage>​ messages = conversation.loadMoreGroupMsgFromDB(startMsgId,​ pagesize); List<​EMMessage>​ messages = conversation.loadMoreGroupMsgFromDB(startMsgId,​ pagesize);
-</sxh>+</code>
  
 ===== 消息管理(单一聊天人、所有聊天人) ===== ===== 消息管理(单一聊天人、所有聊天人) =====
行 288: 行 288:
 ==== 获取未读消息数量 ==== ==== 获取未读消息数量 ====
  
-<sxh java>+<code java>
 EMConversation conversation = EMChatManager.getInstance().getConversation(username|groupid);​ EMConversation conversation = EMChatManager.getInstance().getConversation(username|groupid);​
 conversation.getUnreadMsgCount();​ conversation.getUnreadMsgCount();​
-</sxh>+</code>
  
 ==== 未读消息数清零 ==== ==== 未读消息数清零 ====
行 297: 行 297:
 指定会话消息未读数清零。 指定会话消息未读数清零。
  
-<sxh java>+<code java>
 EMConversation conversation = EMChatManager.getInstance().getConversation(username|groupid);​ EMConversation conversation = EMChatManager.getInstance().getConversation(username|groupid);​
 conversation.markAllMessagesAsRead();​ conversation.markAllMessagesAsRead();​
-</sxh>+</code>
  
 ==== 所有未读消息数清零 ==== ==== 所有未读消息数清零 ====
  
-<sxh java>+<code java>
 EMChatManager.getInstance().markAllConversationsAsRead();​ EMChatManager.getInstance().markAllConversationsAsRead();​
-</sxh>+</code>
  
 ==== 获取消息总数 ==== ==== 获取消息总数 ====
  
-<sxh java>+<code java>
 EMConversation conversation = EMChatManager.getInstance().getConversation(username|groupid);​ EMConversation conversation = EMChatManager.getInstance().getConversation(username|groupid);​
     conversation.getMsgCount();​     conversation.getMsgCount();​
-</sxh>+</code>
    
 ==== 清空会话聊天记录 ==== ==== 清空会话聊天记录 ====
  
-<sxh java>+<code java>
 //​清空和某个user的聊天记录(包括本地),不删除conversation这个会话对象 //​清空和某个user的聊天记录(包括本地),不删除conversation这个会话对象
 EMChatManager.getInstance().clearConversation(username|groupid);​ EMChatManager.getInstance().clearConversation(username|groupid);​
-</sxh>+</code>
  
 ==== 删除单个聊天记录 ==== ==== 删除单个聊天记录 ====
  
-<sxh java>+<code java>
 //​删除和某个user的整个的聊天记录(包括本地) //​删除和某个user的整个的聊天记录(包括本地)
 EMChatManager.getInstance().deleteConversation(username|groupid);​ EMChatManager.getInstance().deleteConversation(username|groupid);​
行 330: 行 330:
 EMConversation conversation = EMChatManager.getInstance().getConversation(username|groupid);​ EMConversation conversation = EMChatManager.getInstance().getConversation(username|groupid);​
 conversation.removeMessage(deleteMsg.msgId);​ conversation.removeMessage(deleteMsg.msgId);​
-</sxh>+</code>
  
 ==== 删除所有聊天记录 ==== ==== 删除所有聊天记录 ====
  
-<sxh java>+<code java>
  //​删除所有会话记录(包括本地)  //​删除所有会话记录(包括本地)
 EMChatManager.getInstance().deleteAllConversation();​ EMChatManager.getInstance().deleteAllConversation();​
-</sxh>+</code>
  
 ==== 设置某条消息为已读 ==== ==== 设置某条消息为已读 ====
  
-<sxh java>+<code java>
   //​markAsRead为true,则标记msgid的消息位已读   //​markAsRead为true,则标记msgid的消息位已读
   conversation.getMessage({msgid},​markAsRead);​   conversation.getMessage({msgid},​markAsRead);​
-</sxh>+</code>
  
 ==== 设置自定义的消息提示 ==== ==== 设置自定义的消息提示 ====
行 350: 行 350:
 APP 在后台时,新消息会通过 notification 的方式,在手机状态栏提示新消息,可以把提示的内容换成自定义的内容(在application的oncreate()里设置)。 APP 在后台时,新消息会通过 notification 的方式,在手机状态栏提示新消息,可以把提示的内容换成自定义的内容(在application的oncreate()里设置)。
  
-<sxh java>+<code java>
 //​获取到配置options对象 //​获取到配置options对象
 EMChatOptions options = EMChatManager.getInstance().getChatOptions();​ EMChatOptions options = EMChatManager.getInstance().getChatOptions();​
行 367: 行 367:
  }  }
 }); });
-</sxh>+</code>
  
 设置自定义 notification 点击跳转 intent。 设置自定义 notification 点击跳转 intent。
行 373: 行 373:
 用户点击 notification 消息,SDK 会有默认的跳转 intent,开发者可以设置自己的跳转 intent,这里以 UIdemo 的代码为例。 用户点击 notification 消息,SDK 会有默认的跳转 intent,开发者可以设置自己的跳转 intent,这里以 UIdemo 的代码为例。
  
-<sxh java>+<code java>
 // 获取到EMChatOptions对象 // 获取到EMChatOptions对象
 EMChatOptions options = EMChatManager.getInstance().getChatOptions();​ EMChatOptions options = EMChatManager.getInstance().getChatOptions();​
行 394: 行 394:
  }  }
 }); });
-</sxh>+</code>
  
 ===== 新消息提示 ===== ===== 新消息提示 =====
行 402: 行 402:
 首先获取EMChatOptions。 首先获取EMChatOptions。
  
-<sxh java>​chatOptions = EMChatManager.getInstance().getChatOptions();</​sxh>+<code java>​chatOptions = EMChatManager.getInstance().getChatOptions();</​code>
  
  
行 408: 行 408:
  
  
-<sxh java> +<code java> 
-chatOptions.setNotifyBySoundAndVibrate(true|false);​ //​默认为true 开启新消息提醒</​sxh>+chatOptions.setNotifyBySoundAndVibrate(true|false);​ //​默认为true 开启新消息提醒</​code>
  
  
 设置是否启用新消息声音提醒。 设置是否启用新消息声音提醒。
  
-<sxh java> +<code java> 
-chatOptions.setNoticeBySound(true|false);​ //​默认为true 开启声音提醒</​sxh>+chatOptions.setNoticeBySound(true|false);​ //​默认为true 开启声音提醒</​code>
  
  
 设置是否启用新消息震动提醒。 设置是否启用新消息震动提醒。
  
-<sxh java> +<code java> 
-chatOptions.setNoticedByVibrate(true|false);​ //​默认为true 开启震动提醒</​sxh>+chatOptions.setNoticedByVibrate(true|false);​ //​默认为true 开启震动提醒</​code>
  
  
 设置语音消息播放是否设置为扬声器播放。 设置语音消息播放是否设置为扬声器播放。
  
-<sxh java> +<code java> 
-chatOptions.setUseSpeaker(true|false);​ //​默认为true 开启扬声器播放</​sxh>+chatOptions.setUseSpeaker(true|false);​ //​默认为true 开启扬声器播放</​code>
  
  
 设置后台接收新消息时是否通过通知栏提示。 设置后台接收新消息时是否通过通知栏提示。
  
-<sxh java> +<code java> 
-chatOptions.setShowNotificationInBackgroud(true|false) //​默认为true</​sxh>+chatOptions.setShowNotificationInBackgroud(true|false) //​默认为true</​code>
  
  
 附: 附:
  
-<sxh java>+<code java>
 chatOptions.setAcceptInvitationAlways(false); ​ chatOptions.setAcceptInvitationAlways(false); ​
  
-//​默认添加好友时为true,是不需要验证的,改成需要验证为false</​sxh>+//​默认添加好友时为true,是不需要验证的,改成需要验证为false</​code>
  
 ===== 导入消息到环信数据库 ===== ===== 导入消息到环信数据库 =====
行 447: 行 447:
 导入消息到环信DB。 导入消息到环信DB。
  
-<sxh java>+<code java>
  //​创建一条发送TextMsg  //​创建一条发送TextMsg
  ​private EMMessage createSentTextMsg(String to) {  ​private EMMessage createSentTextMsg(String to) {
行 479: 行 479:
  //​只需要指定msg.setChatType(ChatType.GroupChat)  //​只需要指定msg.setChatType(ChatType.GroupChat)
  //​然后把目标username传入groupid即可  //​然后把目标username传入groupid即可
-</sxh>+</code>
 ===== Demo 及 SDK 下载 ===== ===== Demo 及 SDK 下载 =====