点开消息记录,中间下方查找,能输入内容,自动查找,单看某人发的 内容没这个功能
可以发送文本消息和表情、语音消息、图片消息、地理位置消息以及文件消息。
发送文本消息及表情
//获取到与聊天人的会话对象。参数username为聊天人的userid或者groupid,后文中的username皆是如此
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
//创建一条文本消息
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.TXT);
//如果是群聊,设置chattype,默认是单聊
message.setChatType(ChatType.GroupChat);
//设置消息body
TextMessageBody txtBody = new TextMessageBody(content);
message.addBody(txtBody);
//设置接收人
message.setReceipt(username);
//把消息加入到此会话对象中
conversation.addMessage(message);
//发送消息
EMChatManager.getInstance().sendMessage(message, new EMCallBack(){});
发送语音消息
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.VOICE);
//如果是群聊,设置chattype,默认是单聊
message.setChatType(ChatType.GroupChat);
VoiceMessageBody body = new VoiceMessageBody(new File(filePath), len);
message.addBody(body);
message.setReceipt(username);
conversation.addMessage(message);
EMChatManager.getInstance().sendMessage(message, new EMCallBack(){});
发送图片消息
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.IMAGE);
//如果是群聊,设置chattype,默认是单聊
message.setChatType(ChatType.GroupChat);
ImageMessageBody body = new ImageMessageBody(new File(filePath));
// 默认超过100k的图片会压缩后发给对方,可以设置成发送原图
// body.setSendOriginalImage(true);
message.addBody(body);
message.setReceipt(username);
conversation.addMessage(message);
EMChatManager.getInstance().sendMessage(message, new EMCallBack(){});
发送地理位置消息
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.LOCATION);
//如果是群聊,设置chattype,默认是单聊
message.setChatType(ChatType.GroupChat);
LocationMessageBody locBody = new LocationMessageBody(locationAddress, latitude, longitude);
message.addBody(locBody);
message.setReceipt(username);
conversation.addMessage(message);
EMChatManager.getInstance().sendMessage(message, new EMCallBack(){});
发送文件消息
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
// 创建一个文件消息
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.FILE);
// 如果是群聊,设置chattype,默认是单聊
if (chatType == CHATTYPE_GROUP)
message.setChatType(ChatType.GroupChat);
//设置接收人的username
message.setReceipt(username);
// add message body
NormalFileMessageBody body = new NormalFileMessageBody(new File(filePath));
message.addBody(body);
conversation.addMessage(message);
EMChatManager.getInstance().sendMessage(message, new EMCallBack(){});
接收消息
通过广播接收新消息
注意事项:为了防止新消息来时,因为没有注册广播接收者,导致漏接消息的情况,注册完接受者以及好友监听等事件后,需要调用以下 SDK 才会发送新消息的广播,只需调用一次即可,可参考 Demo 的 mainactivity。
EMChat.getInstance().setAppInited()
另外,当 APP 在后台时,SDK 默认以 notification 的形式通知有新消息,不会走广播,如果需要走广播,可以调用以下 SDK 关闭 notification 通知,这样新消息还是走发送广播的形式。
EMChatManager.getInstance().getChatOptions().setShowNotificationInBackgroud(false)
注册一个相应 broadcast,用来接收消息。
NewMessageBroadcastReceiver msgReceiver = new NewMessageBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter(EMChatManager.getInstance().getNewMessageBroadcastAction());
intentFilter.setPriority(3);
registerReceiver(msgReceiver, intentFilter);
private class NewMessageBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//消息id
String msgId = intent.getStringExtra("msgid");
//发消息的人的username(userid)
String msgFrom = intent.getStringExtra("from");
//消息类型,文本、图片、语音消息等,这里返回的值为msg.type.ordinal()。
//所以消息type实际为是enum类型
int msgType = intent.getIntExtra("type", 0);
Log.d("main", "new message id:" + msgId + " from:" + msgFrom + " type:" + msgType);
//更方便的 *** 是通过msgId直接获取整个message
EMMessage message = EMChatManager.getInstance().getMessage(msgId);
通过监听事件来接收新消息
注意事项:注册消息事件监听,此 listener 会收到所有类型的 event 事件,如果对某种或某些类型的事件感兴趣,可以用 registerEventListener(EMEventListener listener, EMNotifierEvent.EventType[] types)。
EMNotifierEvent.Event.EventDeliveryAck;//已发送回执event注册
EMNotifierEvent.Event.EventNewCMDMessage;//接收透传event注册
EMNotifierEvent.Event.EventNewMessage;//接收新消息event注册
EMNotifierEvent.Event.EventOfflineMessage;//接收离线消息event注册
EMNotifierEvent.Event.EventReadAck;//已读回执event注册
EMNotifierEvent.Event.EventConversationListChanged;//通知会话列表通知event注册(在某些特殊情况,SDK去删除会话的时候会收到回调监听)
接收所有的 event 事件:
EMChatManager.getInstance().registerEventListener(new EMEventListener() {
@Override
public void onEvent(EMNotifierEvent event) {
// TODO Auto-generated method stub
EMMessage message = (EMMessage) event.getData();
有选择性的接收某些类型 event 事件:
EMChatManager.getInstance().registerEventListener(new EMEventListener() {
@Override
public void onEvent(EMNotifierEvent event) {
// TODO Auto-generated method stub
EMMessage message = (EMMessage) event.getData();
}, new EMNotifierEvent.Event[]{EMNotifierEvent.Event.EventNewMessage,.......}
注:广播和监听事件不可同时混用。
解除监听事件
如果不想收到回调,则执行解除监听事件。
EMChatManager.getInstance().unregisterEventListener(new EMEventListener() {
@Override
public void onEvent(EMNotifierEvent event) {
// TODO Auto-generated method stub
获取聊天记录
EMConversation conversation = EMChatManager.getInstance().getConversation(username|groupid);
//获取此会话的所有消息
ListEMMessage messages = conversation.getAllMessages();
//sdk初始化加载的聊天记录为20条,到顶时需要去db里获取更多
//获取startMsgId之前的pagesize条消息,此 *** 获取的messages sdk会自动存入到此会话中,app中无需再次把获取到的messages添加到会话中
ListEMMessage messages = conversation.loadMoreMsgFromDB(startMsgId, pagesize);
//如果是群聊,调用下面此 ***
ListEMMessage messages = conversation.loadMoreGroupMsgFromDB(startMsgId, pagesize);
消息管理(单一聊天人、所有聊天人)
获取未读消息数量
EMConversation conversation = EMChatManager.getInstance().getConversation(username|groupid);
conversation.getUnreadMsgCount();
未读消息数清零
指定会话消息未读数清零。
EMConversation conversation = EMChatManager.getInstance().getConversation(username|groupid);
conversation.markAllMessagesAsRead();
所有未读消息数清零
EMChatManager.getInstance().markAllConversationsAsRead();
获取消息总数
EMConversation conversation = EMChatManager.getInstance().getConversation(username|groupid);
conversation.getMsgCount();
清空会话聊天记录
//清空和某个user的聊天记录(包括本地),不删除conversation这个会话对象
EMChatManager.getInstance().clearConversation(username|groupid);
删除单个聊天记录
//删除和某个user的整个的聊天记录(包括本地)
EMChatManager.getInstance().deleteConversation(username|groupid);
//删除当前会话的某条聊天记录
EMConversation conversation = EMChatManager.getInstance().getConversation(username|groupid);
conversation.removeMessage(deleteMsg.msgId);
删除所有聊天记录
//删除所有会话记录(包括本地)
EMChatManager.getInstance().deleteAllConversation();
设置某条消息为已读
//markAsRead为true,则标记msgid的消息位已读
conversation.getMessage({msgid},markAsRead);
设置自定义的消息提示
APP 在后台时,新消息会通过 notification 的方式,在手机状态栏提示新消息,可以把提示的内容换成自定义的内容(在application的oncreate()里设置)。
//获取到配置options对象
EMChatOptions options = EMChatManager.getInstance().getChatOptions();
//设置自定义的文字提示
options.setNotifyText(new OnMessageNotifyListener() {
@Override
public String onNewMessageNotify(EMMessage message) {
//可以根据message的类型提示不同文字,这里为一个简单的示例
return "你的好基友" + message.getFrom() + "发来了一条消息哦";
@Override
public String onLatestMessageNotify(EMMessage message, int fromUsersNum, int messageNum) {
return fromUsersNum + "个基友,发来了" + messageNum + "条消息";
设置自定义 notification 点击跳转 intent。
用户点击 notification 消息,SDK 会有默认的跳转 intent,开发者可以设置自己的跳转 intent,这里以 UIdemo 的代码为例。
// 获取到EMChatOptions对象
EMChatOptions options = EMChatManager.getInstance().getChatOptions();
//设置notification点击listener
options.setOnNotificationClickListener(new OnNotificationClickListener() {
@Override
public Intent onNotificationClick(EMMessage message) {
Intent intent = new Intent(applicationContext, ChatActivity.class);
ChatType chatType = message.getChatType();
if(chatType == ChatType.Chat){ //单聊信息
intent.putExtra("userId", message.getFrom());
intent.putExtra("chatType", ChatActivity.CHATTYPE_SINGLE);
}else{ //群聊信息
//message.getTo()为群聊id
intent.putExtra("groupId", message.getTo());
intent.putExtra("chatType", ChatActivity.CHATTYPE_GROUP);
return intent;
新消息提示
SDK 中提供了方便的新消息提醒功能。可以在收到消息时调用,提醒用户有新消息。
首先获取EMChatOptions。
chatOptions = EMChatManager.getInstance().getChatOptions();
设置是否启用新消息提醒(打开或者关闭消息声音和震动提示)。
chatOptions.setNotifyBySoundAndVibrate(true|false); //默认为true 开启新消息提醒
设置是否启用新消息声音提醒。
chatOptions.setNoticeBySound(true|false); //默认为true 开启声音提醒
设置是否启用新消息震动提醒。
chatOptions.setNoticedByVibrate(true|false); //默认为true 开启震动提醒
设置语音消息播放是否设置为扬声器播放。
chatOptions.setUseSpeaker(true|false); //默认为true 开启扬声器播放
设置后台接收新消息时是否通过通知栏提示。
chatOptions.setShowNotificationInBackgroud(true|false) //默认为true
附:
chatOptions.setAcceptInvitationAlways(false);
//默认添加好友时为true,是不需要验证的,改成需要验证为false
这是可以的,importMessage
public java.lang.String importMessage(EMMessage message, boolean addToMemory)
向消息数据库导入一条聊天记录
参数:
message - ,需要导入的message
addToMemory - 在内存里也保持此消息
返回:
messageId
importMessages
public void importMessages(java.util.ListEMMessage msgs)
向消息数据库导入多条聊天记录 在调用次函数时要保证,消息的发送方或者接收方是当前用户 已经对函数做过速度优化, 推荐一次导入1000条数据
可以的,环信服务器有导出聊天记录的接口,自己看开发文档就好了。
是一个很业余的收集 生意业务 仄台,您要时刻存眷 突领事宜 , 二0 一 八年黄金商场大概 没有会有太孬的表示 ,外国正在 二00 九年将代替 印度,较上一生意业务 日持仄。持续 高挫,成接质等数字材料 ,正在美圆看涨之高: 二 五 九点 三 五群众币/克本日 海内 尾饰金。 职员 政事等。 一- ...
热点 谈论 游侠网友 [浙江省嘉废市电疑网友] 0 九- 二 二 二 一:0 六 别闹那何时算可骇 游戏了 小父熟皆敢玩 突突突 挨僵尸战挨苍蝇嫩鼠同样 吓人吗 玻璃作的口净。。。。。告发 一 一 九 七0 归复 游侠网友 [外国挪动网友] 一 二- 二 九 一 五: 三 五 您...
造一瓶程控管宽谨品性上有优秀 火准取保证 ,威士忌外的极品。属蒸馏酒,第一个临盆 并折衷 威士忌的临盆 商。 杰克丹僧。正在橡木桶外鲜酿多年后,人头马、个中 乌圆/瓶皇野旗兵「 二 一年 八 八0元/瓶愿望 那答复 能助到您。调配成 四 三度阁下 的烈性蒸馏酒年夜 芹。正在年夜 型的洋酒商止皆能战随...
二0 一 九年 一0月 二 一日淘宝地猫单 一 一运动 开端 预卖,买物津揭也能够发与了。许多 答本年 淘宝地猫单十一运动 的买物津揭要怎么用?上面小编给年夜 野先容 高 二0 一 九淘宝地猫单十一买物津揭运用规矩 先容 。 买物津揭发与天址>>>> 二0 一 九...
本年 的国庆节跟外春节是统一 地。 三地后,谦街飘荡 的红旗战谦街飘喷鼻 的月饼,国泰平易近 安战阖野欢快 ,国取野碰了个谦怀。 正在那个小少假面,年夜 娱给您们预备 了 一0部白色片子 ,咱也患上合营 爱国气氛 没有是~ 嘿嘿,周终痛快 ~ 《八佰》 豆瓣评分: 七. 七 配景 :改...
京东 六 一 八运动 曾经正在水冷入止外的哦,列位 有购甚么器械 了吗?许多 小同伴 正在运动 一开端 的时刻 便迫在眉睫 的购了许多 器械 了,借有些小同伴 借很夷由 没有 晓得购啥,交高去百思特小编便去学学年夜 野 二0 二0年京东 六 一 八怎么廉价 吧~...