android 环信集成,Android 环信集成使用总结
最近因为项目需要,需要集成环信,对于一些账号的注册,配置的添加官方文档上写的都有,就不在记录。就记录一下集成过程中遇到的问题。环信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 环信集成使用总结相关推荐
- android 环信集成,Android Studio下的环信即时通讯简单集成
环信即时通讯云是全球最大的即时通讯云 PaaS 平台,可以快速实现APP的即时通讯的功能,官方的DEMO是基于Eclipse开发的,对于新版本的Android Studio支持不太好,下面就简单说一下 ...
- android环信集成单聊,环信即时通讯单聊集成
[实例简介] 环信即时通讯单聊集成,添加好友,实现单聊,可以学习下 [实例截图] [核心代码] IM └── IM ├── AndroidManifest.xml ├── bin │ ├── An ...
- android环信聊天界面上面显示昵称,【环信征文】在android中5分钟实现环信昵称头像的显示...
老司机带你们5分钟实现昵称头像的显示,车要开了,话不多说,快快上车~ 一.将简版demo里的cache包(5个java文件)复制到自己项目里. 下载环信android简版Demo: 环信Android ...
- 环信即时通讯单聊集成,添加好友,实现单聊
前段时间由于项目需要,了解一下环信即时通讯,然后自己通过查资料写了一个基于环信的单聊demo,一下是源码,希望可以帮助到需要的小伙伴. 首先,我们要去环信官网注册账号,这个我就不多说了,注册完登录,创 ...
- android 自定义表情包,android基于环信的聊天和表情自定义
环信sdk的导入 自定义聊天界面 此处只有静态图,请谅解. 自定义表情发送 自定义聊天界面 简单说下自定义的聊天界面,一个带有recyclerview和的xml文件,和对应的adapter即可.rec ...
- android 环信 emmessagelistener,集成环信实现简单聊天功能
废话不多说,先上效果图 下面来实现 1.第一步导入jar or so 去环信下载sdk导入到我们的项目中 导入完成之后我们区项目的build文件中,android括号的最下方加上以下代码 不然jar无 ...
- 环信快速集成,以及实际集成中遇到的坑
一.pod集成遇到的问题 1.直接pod 安装 pod 'EaseUI', :git => 'https://github.com/easemob/easeui-ios-hyphenate-co ...
- 【快速搞定】教你如何快速集成环信(android端EaseUI),跳过我踩过的坑
[快速搞定]教你如何快速集成环信(android端EaseUI),跳过我踩过的坑 一.前言 最近,公司准备集成一个即时通讯的功能,于是我找到了环信,于是我就这样被坑了,于是就有了本文来教大家如何跳出我 ...
- Android Studio 4.0 集成环信sdk EaseUI全纪录
因为B站尚硅谷Android视频教程<硅谷社交_项目实战>BV1cW411V7yd中的聊天室项目产生兴趣,所以想跟着写一下,但是众多观众在P6:集成环信sdk及EaseUI时遭遇挫折 网上 ...
- android+自定义发彩信,Android实现获取短信验证码的功能以及自定义GUI短信验证
短信验证功能大家都很熟悉了.在很多地方都能见到,注册新用户或者短息验证支付等.短信验证利用短信验证码来注册会员,大大降低了非法注册,很大程度上提高了用户账户的安全性. 目前市面上已经有了很多提供短信验 ...
最新文章
- dell r720服务器raid5安装centos6.5系统
- aix磁盘挂载到linux,AIX下文件系统挂载点相互调换方案
- 【Java】如何理解Java中的双列集合Map?
- linux cordova安装教程,mac怎么安装cordova?
- 消除单点,一篇搞定 | 架构设计篇
- REST架构中的HTTP动词
- java to do_java-将连字号分隔的字词(例如“ do-some-stuff”)转换为小写的驼峰形式(例如“ doSomeStuff”)的最优雅方法是什么?...
- 算法学习笔记:连通图详解
- GL_TEXTURE_WRAP系列参数的取值
- 敏捷开发scrum模型
- Hibernate手动控制事物
- .NET与JAVA的区别【完整版】
- 简单家乡风景静态HTML网页设计作品 DIV布局家乡介绍网页模板代码 DW个人网站制作成品 web网页制作与实现
- 10天精读掌握:计算机组成与设计COAD:Patterson and Hennessy 第6天 2018/10.31
- 笔记本通过串口连接交换机进行配置
- 群晖nas做文件服务器的安全性,更换NAS后,数据如何安全处理?聊聊NAS数据安全性那些事...
- OS模块(包) - 2
- TL431的几种基本用法
- 图的基本概念-连通分支数
- 亿美软通打造5G消息精品案例,覆盖多垂直电商领域