环信ease-sdk-3.3.4_r1 集成用户头像 昵称功能的简单处理方法

要的就是这个效果环信服务器并不保存用户的头像用户名,但实际开发需要设置用户昵称头像。下面提供一个简单的办法设置用户的头像昵称,这里的头像昵称从自己的服务器获取的并且保存到本地。

1.服务端的设计
服务端设计比较简单,提供个接口,用户传入自己的环信ID(用户名)得到相关的用户列表信息,其中包含用户头像昵称还有其他一些你需要的信息

2.手机端的实现
找了半天找到环信设置用户头像的方法在DemoHelper这个类中,直接贴代码吧

 /**
     * Global listener
     * If this event already handled by an activity, you don't need handle it again
     * activityList.size() <= 0 means all activities already in background or not in Activity Stack
     */
    protected void registerMessageListener() {
        messageListener = new EMMessageListener() {
            private BroadcastReceiver broadCastReceiver = null;

            @Override
            public void onMessageReceived(List<EMMessage> messages) {
                for (EMMessage message : messages) {
                    EMLog.d(TAG, "onMessageReceived id : " + message.getMsgId());
                    String hxIdFrom=message.getFrom();
                   if(SQUser.init().getUserGropMemData(appContext)!=null){
                       groupMemList.clear();
                       groupMemList = SQUser.init().getUserGropMemData(appContext).getRData();
                       Log.d("这里的信息获取到额", ""+groupMemList.size());
                   }
                    for (int i = 0; i <groupMemList.size() ; i++) {
                        //接收并处理扩展消息
                        if(message.getUserName().equals(groupMemList.get(i).getHx_user_name())){
                            userName=groupMemList.get(i).getUser_name()+groupMemList.get(i).getDuty();
                            userPic="http://img5.duitang.com/uploads/item/201508/30/20150830132007_TjANX.thumb.224_0.jpeg";
                        }

                    }
                    System.out.println("helper接收到的用户名:"+userName+"helper接收到的id:"+"helper头像:"+userPic);

                    EaseUser easeUser=new EaseUser(hxIdFrom);
                    //设置用户头像
                    easeUser.setAvatar(userPic);
                    //设置用户昵称
                    easeUser.setNick(userName);

                    //存入内存
                    getContactList();
                    contactList.put(hxIdFrom,easeUser);
                    //存入db
                    UserDao dao=new UserDao(appContext);
                    List<EaseUser> users=new ArrayList<EaseUser>();
                    users.add(easeUser);
                    dao.saveContactList(users);

                    // in background, do not refresh UI, notify it in notification bar
                    if(!easeUI.hasForegroundActivies()){
                        getNotifier().onNewMsg(message);
                    }
                }
            }

            @Override
            public void onCmdMessageReceived(List<EMMessage> messages) {
                for (EMMessage message : messages) {
                    EMLog.d(TAG, "receive command message");
                    //get message body
                    EMCmdMessageBody cmdMsgBody = (EMCmdMessageBody) message.getBody();
                    final String action = cmdMsgBody.action();//获取自定义action
                    //red packet code : 处理红包回执透传消息
                    if(!easeUI.hasForegroundActivies()){
                        if (action.equals(RPConstant.REFRESH_GROUP_RED_PACKET_ACTION)){
                            RedPacketUtil.receiveRedPacketAckMessage(message);
                            broadcastManager.sendBroadcast(new Intent(RPConstant.REFRESH_GROUP_RED_PACKET_ACTION));
                        }
                    }

                    if (action.equals("__Call_ReqP2P_ConferencePattern")) {
                        String title = message.getStringAttribute("em_apns_ext", "conference call");
                        Toast.makeText(appContext, title, Toast.LENGTH_LONG).show();
                    }
                    //end of red packet code
                    //获取扩展属性 此处省略
                    //maybe you need get extension of your message
                    //message.getStringAttribute("");
                    EMLog.d(TAG, String.format("Command:action:%s,message:%s", action,message.toString()));
                }
            }

            @Override
            public void onMessageRead(List<EMMessage> messages) {
            }

            @Override
            public void onMessageDelivered(List<EMMessage> message) {
            }

            @Override
            public void onMessageRecalled(List<EMMessage> messages) {
                for (EMMessage msg : messages) {
                    if(msg.getChatType() == ChatType.GroupChat && EaseAtMessageHelper.get().isAtMeMsg(msg)){
                        EaseAtMessageHelper.get().removeAtMeGroup(msg.getTo());
                    }
                    EMMessage msgNotification = EMMessage.createReceiveMessage(Type.TXT);
                    EMTextMessageBody txtBody = new EMTextMessageBody(String.format(appContext.getString(R.string.msg_recall_by_user), msg.getFrom()));
                    msgNotification.addBody(txtBody);
                    msgNotification.setFrom(msg.getFrom());
                    msgNotification.setTo(msg.getTo());
                    msgNotification.setUnread(false);
                    msgNotification.setMsgTime(msg.getMsgTime());
                    msgNotification.setLocalTime(msg.getMsgTime());
                    msgNotification.setChatType(msg.getChatType());
                    msgNotification.setAttribute(Constant.MESSAGE_TYPE_RECALL, true);
                    EMClient.getInstance().chatManager().saveMessage(msgNotification);
                }
            }

            @Override
            public void onMessageChanged(EMMessage message, Object change) {
                EMLog.d(TAG, "change:");
                EMLog.d(TAG, "change:" + change);
            }
        };

        EMClient.getInstance().chatManager().addMessageListener(messageListener);
    }

如上,这里的onMessageReceived(List messages)
是全局的消息监听,这儿收到消息后去对比从我们服务器请求的用户数据并且设置相应的头像用户名到数据库中。自己的服务器的数据我做了本地缓存.用到的时候取出即可。只要改如下方法即可

@Override
            public void onMessageReceived(List<EMMessage> messages) {
                for (EMMessage message : messages) {
                    EMLog.d(TAG, "onMessageReceived id : " + message.getMsgId());
                    String hxIdFrom=message.getFrom();
                   if(SQUser.init().getUserGropMemData(appContext)!=null){
                       groupMemList.clear();
                       groupMemList = SQUser.init().getUserGropMemData(appContext).getRData();
                       Log.d("这里的信息获取到额", ""+groupMemList.size());
                   }
                    for (int i = 0; i <groupMemList.size() ; i++) {
                        //接收并处理扩展消息
                        if(message.getUserName().equals(groupMemList.get(i).getHx_user_name())){
                            userName=groupMemList.get(i).getUser_name()+groupMemList.get(i).getDuty();
                            userPic="http://img5.duitang.com/uploads/item/201508/30/20150830132007_TjANX.thumb.224_0.jpeg";
                        }

                    }
                    System.out.println("helper接收到的用户名:"+userName+"helper接收到的id:"+"helper头像:"+userPic);
                    EaseUser easeUser=new EaseUser(hxIdFrom);
                    easeUser.setAvatar(userPic);
                    easeUser.setNick(userName);

                    //存入内存
                    getContactList();
                    contactList.put(hxIdFrom,easeUser);
                    //存入db
                    UserDao dao=new UserDao(appContext);
                    List<EaseUser> users=new ArrayList<EaseUser>();
                    users.add(easeUser);
                    dao.saveContactList(users);

                    // in background, do not refresh UI, notify it in notification bar
                    if(!easeUI.hasForegroundActivies()){
                        getNotifier().onNewMsg(message);
                    }
                }
            }

至此可以显示别人的昵称头像了。。。那么自己的该咋办。。。

好的研究了半天,可以在这设置,EaseUserUtils找到这个方法

/**
     * set user avatar
     *
     * @param username
     */
    public static void setUserAvatar(Context context, String username, ImageView imageView) {
        EaseUser user = getUserInfo(username);
        Log.d("这里的用户名", username);
        if (user != null && user.getAvatar() != null) {
            try {
                int avatarResId = Integer.parseInt(user.getAvatar());
                Glide.with(context).load(avatarResId).into(imageView);
            } catch (Exception e) {
                //use default avatar
                Glide.with(context).load(user.getAvatar()).diskCacheStrategy(DiskCacheStrategy.ALL).placeholder(R.drawable.ease_default_avatar).into(imageView);
            }
        } else {
            Glide.with(context).load(head).diskCacheStrategy(DiskCacheStrategy.ALL).placeholder(R.drawable.ease_default_avatar).into(imageView);
        }


    }

在这个类里面新增个方法,设置当前用户的头像昵称

private static String hxUserName = "";
    private static String userName = "";
    private static String head = "";

    /*
    * 设置我的用户名 我的头像
    * @param hxUserName 当前用的环信用户名
    * @param userName  将要设置的用户名
    * @param head  将要设置的用户头像地址
    * */
    public static void setMyUserInfo(String hxName, String myUserName, String headImg) {
        userName = myUserName;
        hxUserName = hxName;
        head = headImg;
    }

setUserAvatar(Context context, String username, ImageView imageView)
中的else中设置头像昵称

Glide.with(context).load(head).diskCacheStrategy(DiskCacheStrategy.ALL).placeholder(R.drawable.ease_default_avatar).into(imageView);

OK收工,有什么不懂得可以留言哦

QQ:910689331

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值