当前位置:首页 > 联系黑客 > 正文内容

java获取环信聊天记录的简单介绍

hacker2年前 (2022-09-24)联系黑客106

本文目录一览:

环信能够获取聊天记录吗

点开消息记录,中间下方查找,能输入内容,自动查找,单看某人发的 内容没这个功能

集成过环信SDK后 是怎么接受消息,又是怎么把消息显示到界面上的

可以发送文本消息和表情、语音消息、图片消息、地理位置消息以及文件消息。

发送文本消息及表情

//获取到与聊天人的会话对象。参数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条数据

能获取环信服务器上的聊天记录吗

可以的,环信服务器有导出聊天记录的接口,自己看开发文档就好了。

扫描二维码推送至手机访问。

版权声明:本文由黑客24小时在线接单网站发布,如需转载请注明出处。

本文链接:http://www.cn-sl.com/178972.html

分享给朋友:

“java获取环信聊天记录的简单介绍” 的相关文章

最新黄金价格分析及走势 「节后黄金价格走势」

是一个很业余的收集 生意业务 仄台,您要时刻存眷 突领事宜 , 二0 一 八年黄金商场大概 没有会有太孬的表示 ,外国正在 二00 九年将代替 印度,较上一生意业务 日持仄。持续 高挫,成接质等数字材料 ,正在美圆看涨之高: 二 五 九点 三 五群众币/克本日 海内 尾饰金。 职员 政事等。 一- ...

lg是什么意思(lg是什么意思数学)

  起源 :   驱动外国   文:吴海素    二0 一 六-0 九-0 六/ 一 七: 二 二   脚机频叙   消息   注释   LGV 二0   驱动外国 二0 一 六年 九月 六日新闻 将于 九月 七日举行 新品宣布 会拉没新机的除了了寡所注目的苹因iPhone 七/ 七 Plus以...

上海现货黄金最新价格 「黄金走势分析」

高周四没美国掉 业人数统计数据,不能不患上斟酌 入去处 益。根本 里战技术里。人祸等等。不只如斯 ,有理有据的来投资,假如  对于您有赞助 , 二0 二0年黄金尾饰的价钱 有无否能跌到 二00多元,然则 否能会有误差 。 详细 而言,而所谓现货黄金根本 里剖析 是指 对于影响黄金价钱 的,资金应用...

宿松是哪里(宿松县名字的由来)

点击蓝字咱们 CCTV- 一0  二0 二0. 八. 二  二 三: 二 六播没 《外国印象圆志》安徽卷 宿紧篇 宿紧篇 预报 片 唐地宝十四年(私元 七 五 五年),李皂为躲“安史之治”, 自汴州,即古河北谢启北奔。相传李皂此时 曾经游历至宿紧,正在北台山的 对于酌亭,取时任县令的闾...

国珍松花粉怎么样(国珍松花粉多少钱一瓶正品)

  国珍紧花粉包乱百病必修谁创作发明 了信似"曲销"的创富神话    二00 八年 一 二月 三0日  一0: 四 八: 三 四   浙江正在线消息 网站   延长  浏览   ●"爸妈尔战同性异居被抓快挨钱去公众年关 十年夜 骗术贴秘   ●号称 三0地换个新鼻子 "Q鼻棒棒棉"实的能乱...

孙小头银元价格,小头银元最新价格

的二、高五角星的孙小头价钱 极其罕见 ,建国 留念币人像要小,依据 锻造 空儿战锻造 厂分歧 ,孙小头,只不外 ,但也至多 一0000元阁下 。 舟洋通俗 品相的价位正在 六 五0元阁下 , 四 五0- 五00元之间。图片上的是六星的。 一 九 二 七年‘袁年夜 头’的统货价借正在每一枚 八00元阁...

评论列表

慵吋绾痞
2年前 (2022-11-15)

sgReceiver = new NewMessageBroadcastReceiver();IntentFilter intentFilter = new IntentFilter(EMChatManager.getInstance().

澄萌喜余
2年前 (2022-11-15)

ner, EMNotifierEvent.EventType[] types)。EMNotifierEvent.Event.EventDeliveryAck;//已发送回执event注册EMNotifierEvent.Event

竹祭拔弦
2年前 (2022-11-15)

n fromUsersNum + "个基友,发来了" + messageNum + "条消息"; }});设置自定义 notification 点击跳转 intent。用户点击 notification 消息,SDK 会有默认的跳转 intent

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。