前言:本文是在已经集成环信SDK及使用环信easeUi的基础上进行的,如果不了解环信SDK集成及easeUi,请点击跳转:环信IM SDK使用(一):集成环信SDK及注意事项和环信IM SDK使用(三):环信EaseUi库介绍。

从这篇文章开始,笔者会一步步集成环信IM SDK,并介绍集成中用到的主要接口。

一、集成会话列表模块

1、继承EaseConversationListFragment

public class ConversationListFragment extends EaseConversationListFragment {......
}

EaseConversationListFragment实现了会话列表逻辑,会话列表按照时间降序排序。同时实现了快捷菜单,实现了消息指定及删除消息的功能。

2、重写EaseConversationListFragment中的onItemClick方法,实现会话列表点击事件

public class ConversationListFragment extends EaseConversationListFragment {@Overridepublic void onItemClick(View view, int position) {super.onItemClick(view, position);Toast.makeText(mContext, "点击了条目:"+position, Toast.LENGTH_SHORT).show();}
}

3、其他功能

(1)添加其他菜单项
重写onChildCreateContextMenu可添加新的菜单项。
例如:

 @Overridepublic void onChildCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo, Object item) {super.onChildCreateContextMenu(menu, v, menuInfo, item);if(item instanceof MsgTypeManageEntity) {String ext = ((MsgTypeManageEntity) item).getExtField();if(!TextUtils.isEmpty(ext) && EaseCommonUtils.isTimestamp(ext)) {// 含有时间戳menu.findItem(R.id.action_cancel_top).setVisible(true);menu.findItem(R.id.action_make_top).setVisible(false);}}}

(2)设置菜单项点击事件
重写onChildContextItemSelected可设置菜单项的点击事件。
例如:

 @Overridepublic void onChildContextItemSelected(MenuItem menuItem, Object object) {super.onChildContextItemSelected(menuItem, object);if(object instanceof MsgTypeManageEntity) {MsgTypeManageEntity msg = (MsgTypeManageEntity) object;switch (menuItem.getItemId()) {case R.id.action_make_top :msg.setExtField(System.currentTimeMillis()+"");DemoHelper.getInstance().update(msg);mViewModel.loadConversationList();break;case R.id.action_cancel_top:msg.setExtField("");DemoHelper.getInstance().update(msg);mViewModel.loadConversationList();break;case R.id.action_delete:mViewModel.deleteSystemMsg(msg);break;}}}

(3)添加其他类型的条目类型,比如说系统消息
重写addDelegate方法,通过listAdapter可添加其他条目类型。
例如:

    @Overridepublic void addDelegate() {super.addDelegate();listAdapter.addDelegate(new SystemMessageDelegate());}

二、主要SDK api介绍

1、获取当前用户的所有会话

Map<String, EMConversation> conversations = EMClient.getInstance().chatManager().getAllConversations();

这是从本地数据库获取的。

2、删除会话

boolean isDelete = EMClient.getInstance().chatManager().deleteConversation(conversationId, true);

删除指定id的会话,第二个参数是指是否删除本地的聊天记录。这个方法返回的布尔值,如果删除成功则返回true,否则返回false。

3、将会话中的所有未读消息置为已读

conversation.markAllMessagesAsRead();

三、如何自定义条目类型

在第一中我们说了如何增加条目类型,比如说添加系统消息类型,那么如何增加这种消息类型呢?

1、继承EaseBaseDelegate

public class SystemMessageDelegate extends EaseBaseDelegate<String, SystemMessageDelegate.ViewHolder> {@Overrideprotected int getLayoutId() {return 0;}@Overrideprotected SystemMessageDelegate.ViewHolder createViewHolder(View view) {return new ViewHolder(view);}public static class ViewHolder extends EaseBaseRecyclerViewAdapter.ViewHolder<String> {public ViewHolder(@NonNull View itemView) {super(itemView);}@Overridepublic void initView(View itemView) {}@Overridepublic void setData(String item, int position) {}}
}

其中EaseBaseDelegate后面的第一个泛型值对应的是该代理类出来的数据类型,第二个为其ViewHolder。

2、返回条目布局,并将ViewHolder返回给createViewHolder方法。

3、重写isForViewType方法,确定使用该代理类的条件。

    @Overridepublic boolean isForViewType(String item, int position) {return item != null;}

4、最后将该代理类添加到listAdapter中即可

listAdapter.addDelegate(new SystemMessageDelegate());

代理类的具体使用原理,后续文章会进行详细的讲解。大家也可以阅读这篇文章:一种优雅的方式实现RecyclerView条目多类型。

附:
(1)Demo地址:EaseIMDemo。
(2)环信IM App开源地址:EaseIM。
(3)一种优雅的方式实现RecyclerView条目多类型。

环信IM SDK使用(四):环信会话列表实现及相关接口介绍相关推荐

  1. 使用腾讯云短信服务实现Spring Boot短信发送

    发送短信 01 注册微信公众号 02 注册腾讯云账号 03 创建签名和模板 第一步 创建签名 第二部 创建模板 04 发送短信 01 注册微信公众号 在百度搜索微信公众平台,并在进入官网后注册.在账号 ...

  2. 平台层-适配层-核心层|拆分环信ONE SDK架构

    Table of Contents ONE SDK架构设计 平台层 适配层 核心层 Audio/Video Call Abstract Protocol Layer 环信即时通讯SDK自2014年6月 ...

  3. 环信IM SDK使用(一):集成环信SDK及注意事项

    环信IM SDK可以帮助用户快速开发IM相关的应用.如何快速集成环信IM SDK呢? 首先附上环信官网的集成SDK的文档:Android SDK 介绍及导入 一.集成环信IM SDK 1.申请环信Ap ...

  4. shit 环信 IM SDK IM SDK web

    shit 环信 IM SDK & IM SDK & web 环信 IM SDK, 采坑大全 自己写 UI appkey 是否正确 password 是字符串,不是 数字 HTTPS 是 ...

  5. Linux sdk工作的前景,环信Linux SDK测试版简直逆天 高端大气上档次

    万物互联时代,物联网创新方兴未艾.今日环信即时通讯云宣布环信LinuxSDK测试版正式发布,作为环信生态圈重要的布局,环信LinuxSDK测试版使用C++开发,原生支持Linux操作系统,适用于基于L ...

  6. 李洪强iOS开发本人集成环信的经验总结_01环信SDK的导入

    李洪强iOS开发本人集成环信的经验总结_01环信SDK的导入 01 - 直接在项目中导入SDK和一些静态库 这个时候,没有错误的编译没有错误的话,就说明SDK已经配置成功 还有一种方法是用cocoap ...

  7. IM实战:Android接入环信 IM SDK

    本次学习目标: 注册环信: Android端集成环信 IM SDK: 实现注册-登录-发送消息-会话列表等: 一.环信IM        什么是环信IM 环信IM是一款即时通讯产品,为开发者提供基于移 ...

  8. 环信IM SDK使用(二):环信SDK初始化及注册和登录

    上一篇文章,我们介绍了如何集成环信IM SDK:环信IM SDK使用(一):集成环信SDK及注意事项,后面的文章是在这个的基础上一步一步实现的,如果还有不清楚如何集成环信IM SDK的,请翻看上一篇文 ...

  9. 环信 php后台集成,集成环信IM功能

    之前在项目中做过环信IM,一直都没时间整理这些笔记很功能 ,如今偷得浮生半日,花时间把之前的代码看了下 独自乐乐,不如众乐乐,然后把这部分整理下,分享给大家. 1  首先 注册环信官网注册账号 环信官 ...

最新文章

  1. syntaxerror是什么错误_【第1643期】自定义错误及扩展错误
  2. array_push_PHP array_push()函数与示例
  3. WKWebview加载本地图片时出现路径问题
  4. 安卓逆向_22( 一 ) --- Xposed【 Android Studio + Xposed 实现简单的 hook 】
  5. 微云存照片会变模糊吗_手机自带微云台防抖,VivoX50系列不一般
  6. 南开调整研究生奖助,博士生最高超10万,硕士生6万,可能已经超过他们毕业后能拿的工资!...
  7. Tomcat URL重写
  8. iOS tableView刷新
  9. python核心语法题_《Python核心编程》第3章笔记
  10. Python学习日记之忽略删除字符串空白
  11. 封装dialog弹窗
  12. 技术分享——SSM图书馆预约占座系统
  13. iOS之深入解析Hash在iOS中的应用
  14. Linux_Centos7在安装Mysql常见错误依赖时失败——error: Failed dependencies:mariadb-libs is obsoleted
  15. 多聚赖氨酸大鼠血清白蛋白纳米粒|微囊藻毒素小麦麦清白蛋白纳米粒|雌三醇乳清白蛋白纳米粒Estriol-whey protein
  16. android中实现一键加QQ群功能
  17. paypal支付注意事项
  18. 618什么数码产品值得入手、好评超高的数码产品排行榜
  19. html%2b怎么转换成加号,url 参数的加号变成空格处理
  20. spark 客户端工具_邮件客户端—spark

热门文章

  1. 领英进阶技巧-google和LinkedIn结合
  2. 反馈仅与输入量有关及深度负反馈的理解
  3. 接口练习(台灯案例)
  4. uniform对象及其使用
  5. ML之PDP:基于titanic泰坦尼克是否获救二分类预测数据集利用PDP部分依赖图对RF随机森林实现模型可解释性案例
  6. 自动化与电气工程及其自动化哪个行业好?
  7. 93.第十九章 MySQL数据库 -- MySQL安装和基本使用(三)
  8. matplotlib.pyplot可视化(官方API)
  9. Matlab -----求矩阵特征多项式和特征值
  10. 软件上线后出现了BUG怎么办?新梦想IT