Android 环信的简单使用

2023-11-15

最近在项目中用到了即使用讯,客户要求用环信,我擦,第一次做,坑啊,网上对这个没有特别明确的使用教程,环信的官网也不像其他的第三方有明确的使用方法,只是说了一个简单的集成,看其他人的博客感觉都说的很麻烦,很含糊,所以现在项目完成了,做个简单的总结,希望能帮助到还不太会的童鞋~~大笑

第一步,集成步骤

下载官方发demo,把easeui以Moudle的形式集成到自己的项目中


到这里就算集成完事了,接下来实现功能

1,首先实现基础的聊天功能

      自己写一个Activity,比如我自己写了一个ChatRoomActivity,该activity的布局文件很简单

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:fitsSystemWindows="true"
    android:id="@+id/rl_beijing"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.smarttrust.hunlian.UI.TitlebarUI
        android:id="@+id/titlebarUI"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <FrameLayout
        android:background="@drawable/morenbeijing"
        android:layout_below="@id/titlebarUI"
        android:id="@+id/ec_layout_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </FrameLayout>
</RelativeLayout>
然后,自己写一个ChatFragment,继承EaseChatFragment,在ChatRoomActivity中

private FrameLayout ec_layout_container;
private EaseChatFragment chatFragment;

    private void initChat(){
         ///调用EaseUI封装好的聊天页面
     chatFragment = new ChatFragment();
        ///将参数传递给聊天页面
     chatFragment.setArguments(getIntent().getExtras());
        getSupportFragmentManager().beginTransaction().
                add(R.id.ec_layout_container,chatFragment).commit();
    }
到此就实现了简单的聊天功能,继续往下

聊天肯定要有头像,昵称,点击头像触发跳转(比如跳转到该人的主页),点击消息内容触发(删除该条消息,或者长按复制)

1,先说说怎么传头像,这里只要上传自己的头像然后对方接收即可,这里又回到上面的方法,在ChatRoomActivity中

    private void initChat(){
        SharedPreferences preferences=getSharedPreferences("UserMessage", Context.MODE_PRIVATE);
        String headurl=preferences.getString("headurl", "");//头像
        String userNickname=preferences.getString("nickname", "");//昵称

        ///调用EaseUI封装好的聊天页面
     chatFragment = new ChatFragment();
        chatFragment.setSetmobile(setmobile);
        chatFragment.setUserNickname(userNickname);
        chatFragment.setHearurl(headurl);
//        chatFragment.setUrlBg(drawable);
        ///将参数传递给聊天页面
     chatFragment.setArguments(getIntent().getExtras());
        getSupportFragmentManager().beginTransaction().
                add(R.id.ec_layout_container,chatFragment).commit();
    }
我这里在环信的EaseChatFragment中定义了昵称,头像的set,get方法,获取ChatRoomActivity中传过来的昵称和头像,扩展EMMessage,比如在发送文本,图片,位置,语音的地方扩展,找到如下方法进行拓展即可,代码如下

//send message
protected void sendTextMessage(String content) {
    if(EaseAtMessageHelper.get().containsAtUsername(content)){
        sendAtMessage(content);
    }else{
        EMMessage message = EMMessage.createTxtSendMessage(content, toChatUsername);
        message.setAttribute("headurl",getHearurl());
        message.setAttribute("userNickname",getUserNickname());
        sendMessage(message);
        Log.e("sujd===========send",getHearurl());
        Log.e("sujd===========send",getUserNickname());
    }
}

protected void sendBigExpressionMessage(String name, String identityCode){
    EMMessage message = EaseCommonUtils.createExpressionMessage(toChatUsername, name, identityCode);
    message.setAttribute("headurl",getHearurl());
    message.setAttribute("userNickname",getUserNickname());
    sendMessage(message);
}

protected void sendVoiceMessage(String filePath, int length) {
    EMMessage message = EMMessage.createVoiceSendMessage(filePath, length, toChatUsername);
    message.setAttribute("headurl",getHearurl());
    message.setAttribute("userNickname",getUserNickname());
    sendMessage(message);
}

protected void sendImageMessage(String imagePath) {
    EMMessage message = EMMessage.createImageSendMessage(imagePath, false, toChatUsername);
    message.setAttribute("headurl",getHearurl());
    message.setAttribute("userNickname",getUserNickname());
    sendMessage(message);
}

protected void sendLocationMessage(double latitude, double longitude, String locationAddress) {
    EMMessage message = EMMessage.createLocationSendMessage(latitude, longitude, locationAddress, toChatUsername);
    message.setAttribute("headurl",getHearurl());
    message.setAttribute("userNickname",getUserNickname());
    sendMessage(message);
}

protected void sendVideoMessage(String videoPath, String thumbPath, int videoLength) {
    EMMessage message = EMMessage.createVideoSendMessage(videoPath, thumbPath, videoLength, toChatUsername);
    message.setAttribute("headurl",getHearurl());
    message.setAttribute("userNickname",getUserNickname());
    sendMessage(message);
}

protected void sendFileMessage(String filePath) {
    EMMessage message = EMMessage.createFileSendMessage(filePath, toChatUsername);
    message.setAttribute("headurl",getHearurl());
    message.setAttribute("userNickname",getUserNickname());
    sendMessage(message);
}
发送以后得接受显示出来,找到EaseChatRow这个类,找到方法修改即可

private void setUpBaseView() {
    // set nickname, avatar and background of bubble
    TextView timestamp = (TextView) findViewById(R.id.timestamp);
    if (timestamp != null) {
        if (position == 0) {
            timestamp.setText(DateUtils.getTimestampString(new Date(message.getMsgTime())));
            timestamp.setVisibility(View.VISIBLE);
        } else {
            // show time stamp if interval with last message is > 30 seconds
            EMMessage prevMessage = (EMMessage) adapter.getItem(position - 1);
            if (prevMessage != null && DateUtils.isCloseEnough(message.getMsgTime(), prevMessage.getMsgTime())) {
                timestamp.setVisibility(View.GONE);
            } else {
                timestamp.setText(DateUtils.getTimestampString(new Date(message.getMsgTime())));
                timestamp.setVisibility(View.VISIBLE);
            }
        }
    }
    if (userAvatarView != null) {
        //set nickname and avatar
        try {
            Log.e("环信=======getFrom", message.getStringAttribute("headurl"));
        } catch (HyphenateException e) {
            e.printStackTrace();
        }

        if (message.direct() == Direct.SEND) {
            try {
                EaseUserUtils.setUserAvatar(context, message.getStringAttribute("headurl"), EMClient.getInstance().getCurrentUser(), userAvatarView);
            } catch (HyphenateException e) {
                e.printStackTrace();
            }
        } else {
            try {
                EaseUserUtils.setUserAvatar(context, message.getStringAttribute("headurl"), message.getFrom(), userAvatarView);
            } catch (HyphenateException e) {
                e.printStackTrace();
            }
            EaseUserUtils.setUserNick(message.getFrom(), usernickView);
        }
    }
    if (deliveredView != null) {
        if (message.isDelivered()) {
            deliveredView.setVisibility(View.VISIBLE);
        } else {
            deliveredView.setVisibility(View.INVISIBLE);
        }
    }

    if (ackedView != null) {
        if (message.isAcked()) {
            if (deliveredView != null) {
                deliveredView.setVisibility(View.INVISIBLE);
            }
            ackedView.setVisibility(View.VISIBLE);
        } else {
            ackedView.setVisibility(View.INVISIBLE);
        }

    }

    if (itemStyle != null) {
        if (userAvatarView != null) {
            if (itemStyle.isShowAvatar()) {
                userAvatarView.setVisibility(View.VISIBLE);
                EaseAvatarOptions avatarOptions = EaseUI.getInstance().getAvatarOptions();
                if (avatarOptions != null && userAvatarView instanceof EaseImageView) {
                    EaseImageView avatarView = ((EaseImageView) userAvatarView);
                    if (avatarOptions.getAvatarShape() != 0)
                        avatarView.setShapeType(avatarOptions.getAvatarShape());
                    if (avatarOptions.getAvatarBorderWidth() != 0)
                        avatarView.setBorderWidth(avatarOptions.getAvatarBorderWidth());
                    if (avatarOptions.getAvatarBorderColor() != 0)
                        avatarView.setBorderColor(avatarOptions.getAvatarBorderColor());
                    if (avatarOptions.getAvatarRadius() != 0)
                        avatarView.setRadius(avatarOptions.getAvatarRadius());
                }
            } else {
                userAvatarView.setVisibility(View.GONE);
            }
        }
        if (usernickView != null) {
            if (itemStyle.isShowUserNick())
                usernickView.setVisibility(View.VISIBLE);
            else
                usernickView.setVisibility(View.GONE);
        }
        if (bubbleLayout != null) {
            if (message.direct() == Direct.SEND) {
                if (itemStyle.getMyBubbleBg() != null) {
                    bubbleLayout.setBackgroundDrawable(((EaseMessageAdapter) adapter).getMyBubbleBg());
                }
            } else if (message.direct() == Direct.RECEIVE) {
                if (itemStyle.getOtherBubbleBg() != null) {
                    bubbleLayout.setBackgroundDrawable(((EaseMessageAdapter) adapter).getOtherBubbleBg());
                }
            }
        }
    }

}

有时候需要把头像设置成圆形,找到上面方法用到的工具类EaseUserUtils,进行修改

    public static void setUserAvatar(Context context,String hearurl, String username, ImageView imageView){
       EaseUser user = getUserInfo(username);

        Log.e("环信=======username",username);
        Log.e("环信=======username",user+"");

        //头像设置为圆形
        Glide.with(context).load(hearurl)
                .diskCacheStrategy(DiskCacheStrategy.RESULT)
                .bitmapTransform(new CropCircleTransformation(context))
                .into(imageView);
    }
    
    /**
     * set user's nickname
     */
    public static void setUserNick(String username,TextView textView){
        if(textView != null){
           EaseUser user = getUserInfo(username);
           if(user != null && user.getNick() != null){
              textView.setText(user.getNick());
           }else{
              textView.setText(username);
           }
        }
    }
到此就完成了头像,昵称的设置,接下来看点击事件

ChatFragment extends EaseChatFragment implements EaseChatFragmentHelper 

在我们的这个类里实现如下方法,进行相应的点击 即可

    @Override
    public void onSetMessageAttributes(EMMessage message) {
        Log.e("sujd==========","11111");
    }

    @Override
    public void onEnterToChatDetails() {
        Log.e("sujd==========","22222");
    }

    @Override
    public void onAvatarClick(String username) {
        Log.e("sujd==========","点击头像触发的事件");
    }

    @Override
    public void onAvatarLongClick(String username) {
        Log.e("sujd==========","44444");
    }

    @Override
    public boolean onMessageBubbleClick(EMMessage message) {
        Log.e("sujd==========","55555");
        return false;
    }

    @Override
    public void onMessageBubbleLongClick(final EMMessage message) {
        Log.e("sujd==========","消息框长按事件");
    }

    @Override
    public boolean onExtendMenuItemClick(int itemId, View view) {
        Log.e("sujd==========","77777");
        return false;
    }

    @Override
    public EaseCustomChatRowProvider onSetCustomChatRowProvider() {
        Log.e("sujd==========","88888");
        return null;
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 环信的简单使用 的相关文章

随机推荐

  • springBoot添加自定义拦截器

    文章目录 前言 步骤如下 首先新建一个自己的拦截器 其次 把自己的拦截器注册到spring中 让其生效 前言 新的项目需要校验用户是否登录 在springBoot项目中添加一个自定义的拦截器拦截到所有请求进行逻辑判断 步骤如下 首先新建一个
  • 资讯汇总230429

    230429 11 44 大华股份 重点投入大模型和多模态方向 会持续按需扩容算力 大华股份在业绩说明会表示 GPT 的发展具有里程碑式的意义 公司会重点投入大模型和多模态方向 过去在大模型领域的算法和工程能力已经有一定的积累 先进技术研究
  • 内行看门道:看似“佛系”的《QQ炫舞手游》,背后的音频技术一点都不简单

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由腾讯游戏云发表于云 社区专栏 内行看门道 看似 佛系 的 QQ炫舞手游 背后的音频技术一点都不简单 3月14日 腾讯旗下知名手游 QQ炫舞 正式上线各大应用商店 并迅速登上Ap
  • 卡尔曼滤波与目标跟踪(由cv模型的kf推理到CTRV模型的radar与lidar))(一)

    引用AdamShan 引用知乎陈光 基于cv模型的行人状态预测 卡尔曼滤波与目标追踪 卡尔曼的理论 一 初始化 我们认为小车在第1秒时的状态x与测量值z相等 二 预测 Prediction 完成初始化后 我们开始写Prediction部分的
  • Ubuntu20.04安装各种库----简洁版

    目录 Eigen3 Sophus Pangolin Ceres g2o 建议先装anaconda再装ros python opencv啥该有的都有了 下面仅仅安装ros没有的库 Eigen3 作用 线性代数开源库 提供了有关线性代数 矩阵和
  • 汽配企业如何利用MES管理系统解决生产防错难题

    汽车配件制造业是一个高效率 低成本 高质量的生产领域 但同时也面临着一系列的挑战 其中最为突出的挑战之一是如何在生产过程中避免错误 提高产品的合格率 本文将介绍汽车配件的制造特点以及如何通过MES管理系统解决方案实现生产防错 从而提高产品合
  • 爬虫逆向(js逆向)

    异步爬虫的实现方式 线程池 多任务的异步协程 多线程 生产者消费者模型 线程池 前提 from flask import Flask render template from time import sleep app Flask name
  • 【NLP】文本聚类和主题建模

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • Chrome浏览器更新之后在开发者工具中查看格式化后的js不显示行号问题

    最近更新了谷歌浏览器 然后在调试代码的时候发现一个问题 就是当js代码是压缩后的 将其格式化之后就只显示压缩之前的行号了 如下 未格式化的 格式化之后 这样就很无语了 突然没有了行号就很不习惯了 经过在浏览器设置里面一番找之后终于找到设置这
  • 微信公众号开发(一)——开发模式接入,消息的接收与响应

    1 想自己开一个公众号 先学习一下用 Java 进行微信公众号的开发 微信公众号的管理有开发模式和编辑模式两种 两者是互斥的 腾讯是这么讲的 编辑模式 编辑模式指所有的公众号运营者都可以通过简单的编辑 设置 按关键字回复 等功能 您可以设定
  • python 打包成可执行文件

    文章目录 pyinstaller 另外一个打包工具Nuitka 常见命令选项 工具很多 只说两个 pyinstaller 网上很多人说 pyinstaller 打包慢啊 文件大啊 这那这那的 可能是我还没理解别的工具的妙用 我发现 pyin
  • Unsupported major.minor version 52.0 版本不支持问题

    摘自 https blog csdn net qq 36769100 article details 78880341 Unsupported major minor version 52 0 这个错误网上一百度一大堆 我就简单的记一下 直
  • 从github上下载下来的c++代码用vs或QTCreator运行起来(Cmake)

    初学C 从github上下载了一份源码 不知道怎么运行 特此来记录一下 源码下载下来如图所示 1 用VS运行的方法 1 文件里有CMake 需要我们有CMake工具来构建 所以第一步就是下载CMake 下载链接 Download CMake
  • 微信小程序tab切换,可滑动切换,导航栏跟随滚动实现

    微信小程序tab切换 可滑动切换 导航栏跟随滚动实现 简介 看到今日头条小程序页面可以滑动切换 而且tab导航条也会跟着滚动 点击tab导航 页面滑动 切导航栏也会跟着滚动 就想着要怎么实现这个功能 像商城类商品类目如果做成左右滑动切换类目
  • 关于:Google Chrome 官方下载地址

    1 官方在线安装版 Google Chrome 网络浏览器https www google cn intl zh CN chrome 2 官方离线安装版
  • 五大学科竞赛(二)NIOP全国青少年信息学奥林匹克分区联赛竞赛大纲

    一 初赛内容与要求 表示普及组不涉及 以下同 计 基 算 本 机 常 的 识 诞生与发展 特点 在现代社会中的应用 计算机系统的基本组成 计算机的工作原理 计算机中的数的表示 计算机信息安全基础知识 计算机网络 计 基 算 本 机 操 的
  • IDEA使用JDBC连接MySQL数据库详细教程

    文章目录 创建项目 导入驱动 让导入的驱动生效 注册数据库驱动 连接数据库 创建项目 首先需要保证你已经成功安装mysql和下载连接MySQL数据库的驱动 在IDEA里面创建一个java项目 选择创建Java项目 JDK这里选择1 8 直接
  • 二进制文件与文本文件详解

    二进制文件 定义 二进制文件就是把内存中的数据按其在内存中存储的形式原样输出到磁盘中存放 即存放的是数据的原形式 二进制文件是包含在 ASCII 及扩展 ASCII 字符中编写的数据或程序指令的文件 一般是可执行程序 图形 声音等文件 有自
  • LeetCode 4 - 寻找两个正序数组的中位数

    二分 递归 如果某个有序数组长度是奇数 那么其中位数就是中间元素 如果长度是偶数 那么中位数就是中间两个数字的平均值 假设两个有序数组的长度分别为 m 和 n 由于两个数组长度之和 m n 的奇偶不确定 为了简化代码 在合并后的数组找到第
  • Android 环信的简单使用

    最近在项目中用到了即使用讯 客户要求用环信 我擦 第一次做 坑啊 网上对这个没有特别明确的使用教程 环信的官网也不像其他的第三方有明确的使用方法 只是说了一个简单的集成 看其他人的博客感觉都说的很麻烦 很含糊 所以现在项目完成了 做个简单的