2017.01.10修改了发红包    在红包下面增加了一句xxx收到了xx发的红包,  屏蔽了红包的点击 显示领取红包的消息(具体操作在文章最底部)

首先下载 环信demo,然后就可以开始集成了:                               我没有使用环信中的红包功能,该红包模块是自己写的  详细介绍请往下看

根据环信demo总结的基本的集成步骤如下:

1、根据官方文档 提示的      根据自己需要的功能去 拷贝jar 和 so 库文件

本人是拷贝的demo中的arm64-v8a、armeabi、x86 具体为什么  详细请自己去看文档

2、由于我需要的是  抽取环信中的部分功能  所以 使用了 EaseUI

把EaseUI 添加到项目中 作为类库使用,EaseUI时  需要注意   把EaseUI中原有的 build.gradle删掉

可以Import Moudle    也可以  直接把EaseUI 放到 自己的project  的文件夹目录下

容易出现以下问题:  jar包重复等  或者   可能会出现 v4包或其他jar包重复(这点其实也没什么可根据编译或者同步时具体报错信息 查找对应的原因)   可以自己手动进行去除

3、文档中所描述的 下面这个问题  是肯定会遇到的

Demo 中用到的第三方库

  • android-support-multidex.jar:APP 总方法数超过 64k 时,需要用这个库做分包处理,可以删除

也可以不使用这个jar包 ,   直接在自己的 app的gradle中  的defaultConfig中 加入    multiDexEnabled true  其作用与导入multidex.jar 作用相同

4、还会遇到一些编译的小问题  解决办法  就是修改gradle文件中的  compileSdkVersion  和  buildToolsVersion   即可

5、拷贝demo中  AndroidManifest.xml 中 使用的权限     和  需要使用的  Activity  等信息  ,本人所用的有部分的

<!-- 设置环信应用的AppKey -->
<meta-data android:name="EASEMOB_APPKEY"  android:value="自己的appkey" />
<!-- 声明SDK所需的service SDK核心功能-->
<service android:name="com.hyphenate.chat.EMChatService" android:exported="true"/>
<!-- 声明SDK所需的receiver -->
<receiver android:name="com.hyphenate.chat.EMMonitorReceiver">
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_REMOVED"/>
        <data android:scheme="package"/>
    </intent-filter>
    <!-- 可选filter -->
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
        <action android:name="android.intent.action.USER_PRESENT" />
    </intent-filter>
</receiver>

<activity android:name=".huanxin.LoginActivity"/>
<!--关于环信的Activity-->
<activity android:name=".huanxin.activity.CallActivity"></activity>
<activity android:name=".huanxin.activity.ChatActivity"></activity>
<activity android:name=".huanxin.activity.ChatRoomDetailsActivity"></activity>
<activity android:name=".huanxin.activity.ContextMenuActivity"></activity>
<activity android:name=".huanxin.activity.GroupDetailsActivity"></activity>
<activity android:name=".huanxin.activity.ImageGridActivity"></activity>
<activity android:name=".huanxin.activity.PickAtUserActivity"></activity>
<activity android:name=".huanxin.activity.RecorderVideoActivity"></activity>
<activity android:name=".huanxin.activity.UserProfileActivity"></activity>
<activity android:name=".huanxin.activity.GroupMemberListActivity"></activity>

<activity android:name=".huanxin.activity.VideoCallActivity"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:screenOrientation="portrait"
    android:launchMode="singleTask"
    android:theme="@style/horizontal_slide"></activity>
<activity android:name=".huanxin.activity.VoiceCallActivity"
    android:screenOrientation="portrait"
    android:launchMode="singleTask"
    android:theme="@style/nornal_style"></activity>
<activity android:name=".huanxin.GroupsActivity"></activity>

<!--点击观看视频-->
<activity
    android:name="com.hyphenate.easeui.ui.EaseShowVideoActivity"
    android:screenOrientation="portrait"
    android:theme="@style/horizontal_slide"
    android:windowSoftInputMode="stateAlwaysHidden" >
</activity>
<!-- 显示下载大图页面 -->
<activity
    android:name="com.hyphenate.easeui.ui.EaseShowBigImageActivity"
    android:screenOrientation="portrait"
    android:theme="@style/horizontal_slide" >
</activity>
<!-- 下载文件 -->
<activity
    android:name="com.hyphenate.easeui.ui.EaseShowNormalFileActivity"
    android:screenOrientation="portrait"
    android:theme="@style/horizontal_slide" >
</activity>

<!-- 地图 -->
<activity
    android:name="com.hyphenate.easeui.ui.EaseBaiduMapActivity"
    android:screenOrientation="portrait"
    android:theme="@style/horizontal_slide" >
</activity>
<!--群成员列表页-->
<!--<activity-->
    <!--android:name="com.easemob.redpacketui.ui.activity.RPGroupMemberActivity"-->
    <!--android:screenOrientation="portrait"-->
    <!--android:theme="@style/horizontal_slide"-->
    <!--android:windowSoftInputMode="adjustPan|stateHidden"-->
    <!--/>-->
<!-- 百度地图所需的service -->
<service
    android:name="com.baidu.location.f"
    android:enabled="true"
    android:process=":remote" />
<meta-data
    android:name="com.baidu.lbsapi.API_KEY"
    android:value="3ecea51f560650b1ed8a4b99808f52e8" />

如需详细了解  可参见demo中的具体信息。

6、参照demo中  的application类    对其进行初始化   如果参照了demo   官方的文档只是 辅助理解的作用

如果使用 EaseUI 库  可以去官网  大致了解  easeui 里面的一些界面信息

7、具体有什么问题或者不明白的  也可以进行   官方的技术咨询。  官网 右下角

需要注意的是   环信demo中 自动处理的登录的问题   :

就是在自己登录一个号后  如果不手动清理数据  或者  没有实现注销登录

就无法登录另外一个号       因为demo中 默认使用的 sp记录   还有一些东西   时间长我忘记了   回头再使用时  再进行补充总结的内容

环信集成后

1.clean等问题

估计是android studio的问题   多次clean 或者  rebuild  运行就可以了

2.使用百度地图定位当前经纬度的问题:

自己测试是5.0以下手机出现的   会报百度地图初始化的问题

在自己的  Application类的  oncreate 方法中   对百度地图的sdk进行初始化, 但是在本项目中使用百度地图会出现问题,可在环信的 easeui 中把 百度地图的 .so 库文件等放到已存在的或者自己创建的 jniLibs 目录下:

  

然后需要在  easeui 的 build.gradle  的  android 节点的

sourceSets {main {jniLibs.srcDirs = ['libs','jniLibs']}
}

可以根据自己的需要  更新百度地图的jar包  和 .so库文件     更新后如果环信 EaseBaiduMapActivity 中报错:

//  public NotifyLister mNotifyer = null;
//import com.baidu.location.BDNotifyListener;

把报错的地方  注释掉就可以了

关于环信中聊天界面的扩展菜单:

ChatFragment中

onExtendMenuItemClick 方法

里面有

ITEM_VIDEO   
ITEM_FILE
ITEM_VOICE_CALL
ITEM_RED_PACKET
等扩展的 选项  ------

可进入对应的界面

红包功能的实现:

package com.basedemo.my.xi.basedemo.huanxin.hongbao;import android.content.Context;
import android.text.TextUtils;
import android.view.View;
import android.widget.BaseAdapter;
import android.widget.TextView;import com.basedemo.my.xi.basedemo.R;
import com.basedemo.my.xi.basedemo.huanxin.Constant;
import com.hyphenate.chat.EMMessage;
import com.hyphenate.easeui.widget.chatrow.EaseChatRow;public class ChatRowRedPacket extends EaseChatRow {private TextView mTvGreeting;private TextView mTvSponsorName;private TextView mTvPacketType;public ChatRowRedPacket(Context context, EMMessage message, int position, BaseAdapter adapter) {super(context, message, position, adapter);}@Override
    protected void onInflatView() {if (message.getBooleanAttribute(RedPacketConstant.MESSAGE_ATTR_IS_RED_PACKET_MESSAGE, false)) {inflater.inflate(message.direct() == EMMessage.Direct.RECEIVE ?R.layout.em_row_received_red_packet : R.layout.em_row_sent_red_packet, this);}}@Override
    protected void onFindViewById() {mTvGreeting = (TextView) findViewById(R.id.tv_money_greeting);mTvSponsorName = (TextView) findViewById(R.id.tv_sponsor_name);mTvPacketType = (TextView) findViewById(R.id.tv_packet_type);}@Override
    protected void onSetUpView() {String sponsorName = message.getStringAttribute(RedPacketConstant.EXTRA_SPONSOR_NAME, "");String greetings = message.getStringAttribute(RedPacketConstant.EXTRA_RED_PACKET_GREETING, "");mTvGreeting.setText(greetings);mTvSponsorName.setText(sponsorName);String packetType = message.getStringAttribute(RedPacketConstant.MESSAGE_ATTR_RED_PACKET_TYPE, "");if (!TextUtils.isEmpty(packetType) && TextUtils.equals(packetType, RedPacketConstant.GROUP_RED_PACKET_TYPE_EXCLUSIVE)) {mTvPacketType.setVisibility(VISIBLE);mTvPacketType.setText("专属红包");} else {mTvPacketType.setVisibility(GONE);}handleTextMessage();}protected void handleTextMessage() {if (message.direct() == EMMessage.Direct.SEND) {setMessageSendCallback();switch (message.status()) {case CREATE:progressBar.setVisibility(View.GONE);statusView.setVisibility(View.VISIBLE);// 发送消息
                    break;case SUCCESS: // 发送成功
                    progressBar.setVisibility(View.GONE);statusView.setVisibility(View.GONE);break;case FAIL: // 发送失败
                    progressBar.setVisibility(View.GONE);statusView.setVisibility(View.VISIBLE);break;case INPROGRESS: // 发送中
                    progressBar.setVisibility(View.VISIBLE);statusView.setVisibility(View.GONE);break;default:break;}}}@Override
    protected void onUpdateView() {adapter.notifyDataSetChanged();}@Override
    protected void onBubbleClick() {}}
package com.basedemo.my.xi.basedemo.huanxin.hongbao;import android.content.Context;
import android.widget.BaseAdapter;
import android.widget.TextView;//import com.easemob.redpacketui.R;
//import com.easemob.redpacketui.RedPacketConstant;
import com.basedemo.my.xi.basedemo.R;
import com.hyphenate.chat.EMClient;
import com.hyphenate.chat.EMMessage;
import com.hyphenate.easeui.widget.chatrow.EaseChatRow;public class ChatRowRedPacketAck extends EaseChatRow {private TextView mTvMessage;public ChatRowRedPacketAck(Context context, EMMessage message, int position, BaseAdapter adapter) {super(context, message, position, adapter);}@Override
    protected void onInflatView() {if (message.getBooleanAttribute(RedPacketConstant.MESSAGE_ATTR_IS_RED_PACKET_ACK_MESSAGE, false)) {inflater.inflate(message.direct() == EMMessage.Direct.RECEIVE ?R.layout.em_row_red_packet_ack_message : R.layout.em_row_red_packet_ack_message, this);}}@Override
    protected void onFindViewById() {mTvMessage = (TextView) findViewById(R.id.ease_tv_money_msg);}@Override
    protected void onSetUpView() {String currentUser = EMClient.getInstance().getCurrentUser();String fromUser = message.getStringAttribute(RedPacketConstant.EXTRA_RED_PACKET_SENDER_NAME, "");//红包发送者
        String toUser = message.getStringAttribute(RedPacketConstant.EXTRA_RED_PACKET_RECEIVER_NAME, "");//红包接收者
        String senderId;if (message.direct() == EMMessage.Direct.SEND) {if (message.getChatType().equals(EMMessage.ChatType.GroupChat)) {senderId = message.getStringAttribute(RedPacketConstant.EXTRA_RED_PACKET_SENDER_ID, "");if (senderId.equals(currentUser)) {mTvMessage.setText(R.string.msg_take_red_packet);} else {mTvMessage.setText(String.format(getResources().getString(R.string.msg_take_someone_red_packet), fromUser));}} else {mTvMessage.setText(String.format(getResources().getString(R.string.msg_take_someone_red_packet), toUser));}} else {mTvMessage.setText(String.format(getResources().getString(R.string.msg_someone_take_red_packet), toUser));}}@Override
    protected void onUpdateView() {}@Override
    protected void onBubbleClick() {}}
package com.basedemo.my.xi.basedemo.huanxin.hongbao;/**
 * Created by max on 16/5/24.
 */
public class RedPacketConstant {//以下常量值切勿更改
    public static final String REFRESH_GROUP_RED_PACKET_ACTION = "refresh_group_money_action";public static final String EXTRA_RED_PACKET_SENDER_ID = "money_sender_id";public static final String EXTRA_RED_PACKET_RECEIVER_ID = "money_receiver_id";public static final String MESSAGE_ATTR_IS_RED_PACKET_ACK_MESSAGE = "is_open_money_msg";public static final String MESSAGE_ATTR_IS_RED_PACKET_MESSAGE = "is_money_msg";public static final String EXTRA_RED_PACKET_SENDER_NAME = "money_sender";public static final String EXTRA_RED_PACKET_RECEIVER_NAME = "money_receiver";public static final String EXTRA_SPONSOR_NAME = "money_sponsor_name";public static final String EXTRA_RED_PACKET_GREETING = "money_greeting";public static final String EXTRA_RED_PACKET_ID = "ID";public static final String EXTRA_RED_PACKET_GROUP_ID = "money_from_group_id";public static final String MESSAGE_ATTR_RED_PACKET_TYPE = "money_type_special";public static final String GROUP_RED_PACKET_TYPE_EXCLUSIVE = 

环信聊天的基本集成步骤及遇到的问题相关推荐

  1. IM 即时通讯实战:环信Web IM极速集成

    前置技能 Node.js 环境已搭建. npm 包管理工具的基本使用. Vue2 或者 Vue3 框架基本掌握或使用. 学习目标 项目中集成 IM 即时通讯实战 利用环信 IM Web SDK 快速实 ...

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

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

  3. 环信IM即时通讯集成-遇到问题及创建默认会话+默认欢迎语

    环信IM--创建默认会话+默认欢迎语 第一步:接入环信UI--ease-im-kit 集成版本3.7.3 环信demo中遇到的问题 创建默认会话+默认欢迎语 第一步:接入环信UI–ease-im-ki ...

  4. 环信即时通讯SDK集成——如何使用Swift快速集成环信IM iOS SDK并实现单聊

    本文介绍如何使用swift快速集成环信即时通讯 IM iOS SDK 实现单聊. 前提条件 • Xcode (推荐最新版本). • 安装 iOS 10.0 或更高版本的 iOS 模拟器或 Apple ...

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

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

  6. 环信即时通讯SDK集成——实战:快速实现iOS应用中集成即时通讯IM和UI

    准备 熟练objective-c语言 有一台mac电脑,并安装了xcode 和 cocoapods 目标 手把手教大家在iOS应用中集成即时通讯IM 功能 内容篇幅较长,需要内心平和耐心看下去,务必戒 ...

  7. 环信即时通讯SDK集成——环信 uni-app-demo 升级改造计划——整体代码重构优化(二)

    概述 本次关于 uni-app 代码整体重构工作,基于上一期针对 uni-app 官网 demo 从 vue2 迁移 vue3 框架衍生而来,在迁移过程中有明显感知,目前的项目存在的问题为,项目部分代 ...

  8. uniapp H5接入使用环信聊天

    准备工作 官网下载WebIM.js以及WebIMConfig.js两个文件 然后main.js中引入并配置(appKey就是申请使用的环信APPKEY本文是在WebIMConfig.js配置) 在Ap ...

  9. 环信聊天,可发图片和语音2

    1.录音的代码实现,先写一个按钮了,当点击时执行的事件 /*** 录音*/recording.setOnTouchListener(new View.OnTouchListener() {@Overr ...

最新文章

  1. eclipse 扩展_Eclipse扩展的轻量级集成测试
  2. 安卓手机网页 字体垂直方向对齐_初学Excel办公软件字体对齐调整
  3. 贝壳宣布内部调查实质性完成
  4. Linux正则表达式与grep
  5. Hibernate初始化创建SessionFactory,Session,关闭SessonFactory,session
  6. 一文看懂深度学习新王者「AutoML」:是什么、怎么用、未来如何发展?
  7. 【M1芯片兼容】MP3 Audio Recorder for Mac - MP3录音工具
  8. 发送带嵌入图片邮件之SMTP实现和ESMTP实现
  9. Windows XP64位系统与语言包下载
  10. windows怎样运行wmi服务器,windows系统wmi服务器
  11. 如何做好应用架构分层和模块化?
  12. Windows电脑系统上不错的五款优化软件
  13. 计算机文件丢失系统无法启动,windows7文件丢失无法启动怎么修复_win7系统显示文件丢失无法启动修复方法-win7之家...
  14. Djange构建招聘信息爬虫系统
  15. Unix编程/应用问答中文版(转)
  16. FVCOM三维水动力、水交换、溢油物质扩散及输运数值模拟丨FVCOM模型流域、海洋水环境数值模拟方法
  17. DMHS DM8到Oracle12c PDB双向同步(大小不敏感+落地文件转发)
  18. c语言编程 目录,C语言编程实例简介,目录书摘
  19. c语言开发工程师英文,工程师用英语怎么说
  20. 组态王弹出服务器正在运行中,组态王常见问题集锦(二)

热门文章

  1. 基于Gradle的插件开发之【buildSrc】的使用教程【封装build.gradle.kts】
  2. 数学概率之抛硬币,斗地主
  3. 苹果正在三星电视上安装iTunes;科技部鼓励民营企业参与国家科技 雷锋早报...
  4. 解决Frida hook某些App,明明包名写对了,却找不到进程
  5. 点击放大图标,放大图片
  6. 小程序学习之小程序组件(三)表单组件
  7. G - 小晴天老师系列——可恶的墨水瓶
  8. HTML5期末大作业:网上花店网站设计——鲜花店电商网站(24页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码
  9. Centos安装和配置NPS
  10. python3 JSON 数据解析