最近因为项目需要,需要集成环信,对于一些账号的注册,配置的添加官方文档上写的都有,就不在记录。就记录一下集成过程中遇到的问题。环信demo中的代码太乱,而且一些功能用不到,我们就移值些自己有用的放到自己的项目中。

1.消息监听

环信在收到消息后我们通过设置EMMessageListener,然后在其回调中就可以监听到变化。这个回调是哪个界面需要的时候,就在哪个界面注册监听器,环信的demo中application,MainActivity,chatFragment都进行了监听的回调,他的application中的回调中主要是:

if(!easeUI.hasForegroundActivies()){

getNotifier().notify(message);

}

这部分是判断注册监听的界面是否在前台,而不是整个应用是否在前台。easyui中每个注册监听的界面,它都会通过sdkHelper.pushActivity(this);保存起来,然后在onPause中sdkHelper.popActivity(this)出去,然后就由easeUI.hasForegroundActivies()中的list的长度判断是否在前台。对于自己的项目则进行了部分的修改,当应用在前台时,通过eventbus发送消息,然后到对应的界面处理,因为觉的用回调的方式代码有点乱,所以就用了eventbus,如果不用eventbus的话,也可以使用注册回调的方式进行消息的处理。就像demo中MainActivity在onPause,onResume中分别注册和取消监听,然后在其界面中的EMMessageListener的回调中进行处理,当应用不在前台时仍然发送通知。接收到消息时的部分处理代码如下:

@Override

public void onMessageReceived(Listmessages) {

for (EMMessage message : messages) {

if(EasyUtils.isAppRunningForeground(mContext)){

LogUtils.d("应用在前台");

EventManager.post(Constant.EB_MSG_CHANGE,message);

}else{

LogUtils.d("应用在后台");

EaseUI.getInstance().getNotifier().vibrateAndPlayTone(message);

EaseUI.getInstance().getNotifier().notify(message);

}

}

}

2.联系人监听

这里感觉需要注意的就是,1.数据库进行联系人信息的保存,2.联系人信息变化的监听.3.增删联系人的监听。 联系人通过数据库进行维护,项目中采用greendao进行联系人信息的维护,这里在登录成功后建立对应的表保存其联系人数据即可。对于联系人信息变化的监听同样把只EMContactListener的注册回调放在application中,在联系人增加或者删除时,只要对数据库进行相应的操作即可,然后再通过EventBus发送对应的消息到不同的界面。有一点感觉需要注意的就是:EaseContactListFragment 中有一个方法 onHiddenChanged,因为联系人界面所在的fragment是通过show,hide控制显示隐藏的,frgamentfragment的生命周期不在执行,所以如果收不到消息的监听时,我们就可以通过这个方法进行界面的刷新。

3.同步联系人信息

当应用在运行的时候我们可以收到联系人信息的变化,当应用被杀死时,不会收到。然后我们就可以看到在demohelper中每次都会进行联系人和群组的同步,这里仍然时通过getAllContactsFromServer这个api获取到所有联系人的信息,然后对数据库进行更新或者插入操作。这里复杂在一些判断条件,例如是否登录,是否正在同步等,具体的详情参考demo中即可,把一些不必要的删掉就行。

4.群组信息处理

群组监听同样通过EMGroupChangeListener就可以。参考demo中,我们在对应不同的回调方法里发送相应的通知,然后刷新对应的界面即可。同样要注意也要在初始化时添加群组信息的同步。我们在登录成功后和同步时调用

EMClient.getInstance().groupManager().getJoinedGroupsFromServer()

注意一点,这个api需要放入子线程中。然后我们就可以通过下列方法来刷新本地群组列表

EMClient.getInstance().groupManager().getAllGroups()

5.头像显示

ui给出的设计的头像是圆形的,因为项目依赖的是easeui,本想着直接在easeui中修改头像控件,后来看到环信的EaseImageView本身就提供的有设置radius的api,查询后得知可以通过在application中初始化的时候设置EaseUI的属性来改变头像的角度,具体代码如下:

//设置头像为圆形

EaseAvatarOptions avatarOpts = new EaseAvatarOptions();

//0:默认,1:圆形,2:矩形

avatarOpts.setAvatarShape(1);

//设置角度

avatarOpts.setAvatarRadius(30);

EaseUI.getInstance().setAvatarOptions(avatarOpts);

6.消息列表没数据时显示空布局

在我们平时做的项目中对于一些recycleview或者listview,在没有数据时我们会展示一些空布局,如果是我们自定义的布局,我们可以根据一些第三方框架显示不同的布局,对于easeui,我们就采用最简单的在布局中加上Relativelayout 根据list的长度是否为0,来控制空布局的显示与隐藏。我们在EaseConversationListFragment对应的xml中加上,然后在EaseConversationListFragment中加上判断即可

EaseConversationListFragment:

if (conversationList.size()==0){

getView().findViewById(R.id.conversation_no_data).setVisibility(View.VISIBLE);

}else{

getView().findViewById(R.id.conversation_no_data).setVisibility(View.GONE);

}

ease_fragment_conversation_list:

7.修改聊天布局

我们知道EaseChatInputMenu—ease_widget_chat_input_menu.xml是easeui中的聊天底部输入栏, 他里面有 它里面对应三部分:

底部EditText输入框所在布局:

EaseChatPrimaryMenu:

ease_widget_chat_primary_menu.xml

表情所在布局:

EaseEmojiconMenu:

ease_widget_chat_input_menu.xml

ease_expression_gridview.xml

拍照,图片等选择所在布局:

EaseChatExtendMenu:

ease_chat_menu_item.xml

我们如果需要修改,到不同的布局里修改成我们需要的样式即可

8.项目中有群聊的功能,群聊列表界面主要对应demo中的GroupsActivity,在GroupsActivity中我们根据环信的接口文档得知主要用两个方法:

//从服务器获取自己加入的和创建的群组列表,此api获取的群组sdk会自动保存到内存和db。

Listgrouplist = EMClient.getInstance().groupManager().getJoinedGroupsFromServer();//需异步处理

//从本地加载群组列表

Listgrouplist = EMClient.getInstance().groupManager().getAllGroups();

然后我们根据这两个api就可以实现我们的群聊列表界面。

9.多设备处理

当在其他设备上登陆时,环信会回调EMConnectionListener中的onDisconnected方法,当我们的应用没有被杀死时,我们监听到连接中断时,我们则跳转到LoginActivity提示dialog重新登录。当我们被杀死后,再次进入应用会重新初始化连接,不会因为连接中断导致消息发送不出去。

我的监听放在application中,然后根据不同的状态吗进行不同的监听,在监听到之后先调用退出登录接口,然后跳转到登录界面,并传过去对应的提示语。

HuanXinHelper.getInstance().logout(false,null);

Intent intent = new Intent(mContext, LoginActivity.class);

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

intent.putExtra(Constant.INTENT_ACCOUNT_CONFLICT, true);

intent.putExtra(Constant.INTENT_DISCONNECT_CODE, errorCode);

android 环信集成,Android 环信集成使用总结相关推荐

  1. android 环信集成,Android Studio下的环信即时通讯简单集成

    环信即时通讯云是全球最大的即时通讯云 PaaS 平台,可以快速实现APP的即时通讯的功能,官方的DEMO是基于Eclipse开发的,对于新版本的Android Studio支持不太好,下面就简单说一下 ...

  2. android环信集成单聊,环信即时通讯单聊集成

    [实例简介] 环信即时通讯单聊集成,添加好友,实现单聊,可以学习下 [实例截图] [核心代码] IM └── IM ├── AndroidManifest.xml ├── bin │   ├── An ...

  3. android环信聊天界面上面显示昵称,【环信征文】在android中5分钟实现环信昵称头像的显示...

    老司机带你们5分钟实现昵称头像的显示,车要开了,话不多说,快快上车~ 一.将简版demo里的cache包(5个java文件)复制到自己项目里. 下载环信android简版Demo: 环信Android ...

  4. 环信即时通讯单聊集成,添加好友,实现单聊

    前段时间由于项目需要,了解一下环信即时通讯,然后自己通过查资料写了一个基于环信的单聊demo,一下是源码,希望可以帮助到需要的小伙伴. 首先,我们要去环信官网注册账号,这个我就不多说了,注册完登录,创 ...

  5. android 自定义表情包,android基于环信的聊天和表情自定义

    环信sdk的导入 自定义聊天界面 此处只有静态图,请谅解. 自定义表情发送 自定义聊天界面 简单说下自定义的聊天界面,一个带有recyclerview和的xml文件,和对应的adapter即可.rec ...

  6. android 环信 emmessagelistener,集成环信实现简单聊天功能

    废话不多说,先上效果图 下面来实现 1.第一步导入jar or so 去环信下载sdk导入到我们的项目中 导入完成之后我们区项目的build文件中,android括号的最下方加上以下代码 不然jar无 ...

  7. 环信快速集成,以及实际集成中遇到的坑

    一.pod集成遇到的问题 1.直接pod 安装 pod 'EaseUI', :git => 'https://github.com/easemob/easeui-ios-hyphenate-co ...

  8. 【快速搞定】教你如何快速集成环信(android端EaseUI),跳过我踩过的坑

    [快速搞定]教你如何快速集成环信(android端EaseUI),跳过我踩过的坑 一.前言 最近,公司准备集成一个即时通讯的功能,于是我找到了环信,于是我就这样被坑了,于是就有了本文来教大家如何跳出我 ...

  9. Android Studio 4.0 集成环信sdk EaseUI全纪录

    因为B站尚硅谷Android视频教程<硅谷社交_项目实战>BV1cW411V7yd中的聊天室项目产生兴趣,所以想跟着写一下,但是众多观众在P6:集成环信sdk及EaseUI时遭遇挫折 网上 ...

  10. android+自定义发彩信,Android实现获取短信验证码的功能以及自定义GUI短信验证

    短信验证功能大家都很熟悉了.在很多地方都能见到,注册新用户或者短息验证支付等.短信验证利用短信验证码来注册会员,大大降低了非法注册,很大程度上提高了用户账户的安全性. 目前市面上已经有了很多提供短信验 ...

最新文章

  1. dell r720服务器raid5安装centos6.5系统
  2. aix磁盘挂载到linux,AIX下文件系统挂载点相互调换方案
  3. 【Java】如何理解Java中的双列集合Map?
  4. linux cordova安装教程,mac怎么安装cordova?
  5. 消除单点,一篇搞定 | 架构设计篇
  6. REST架构中的HTTP动词
  7. java to do_java-将连字号分隔的字词(例如“ do-some-stuff”)转换为小写的驼峰形式(例如“ doSomeStuff”)的最优雅方法是什么?...
  8. 算法学习笔记:连通图详解
  9. GL_TEXTURE_WRAP系列参数的取值
  10. 敏捷开发scrum模型
  11. Hibernate手动控制事物
  12. .NET与JAVA的区别【完整版】
  13. 简单家乡风景静态HTML网页设计作品 DIV布局家乡介绍网页模板代码 DW个人网站制作成品 web网页制作与实现
  14. 10天精读掌握:计算机组成与设计COAD:Patterson and Hennessy 第6天 2018/10.31
  15. 笔记本通过串口连接交换机进行配置
  16. 群晖nas做文件服务器的安全性,更换NAS后,数据如何安全处理?聊聊NAS数据安全性那些事...
  17. OS模块(包) - 2
  18. TL431的几种基本用法
  19. 图的基本概念-连通分支数
  20. 亿美软通打造5G消息精品案例,覆盖多垂直电商领域

热门文章

  1. Minimum spanning tree
  2. 浏览器自动化操作(Web Browser Automation)(一)
  3. Android笔记-Felix
  4. 扣哒世界发布面向中小学阶段C++信奥课程体系
  5. [5机器学习]python计算机视觉应用-图片内容识别
  6. N95滤材之父:滤材才是关键!道翰天琼认知智能机器人平台API接口大脑为您揭秘-2。
  7. perl中CPAN的安装
  8. 什么是 HTTP Headers?
  9. UE4对接腾讯GME语音服务(实时语音一)
  10. 华为云服务器查看备份文件,云服务器备份查看备份