android 集成腾讯IMSDK4.2.9 TUIKIT即时通信之更改头像

 

使用环境:

        2018年集成的腾讯IM云通信,使用的是随心聊类似的集成方式。

        2019年集成的时候,官方推荐TUIKIT依赖module 

        github官方demo : https://github.com/tencentyun/TIMSDK

        本人集成的是腾讯IM通信的TUIKIT 4.2.9,也就是从这个版本开始有了头像更改的API类:TIMFriendshipManager。

声明: 

         因TUIKIT腾讯IM依赖包暂时未提供实时更新头像的方法,此功能在四月初会上线

         届时的修改文档是:

         https://cloud.tencent.com/document/product/269/33926

 文档中的修改方法仅仅是提供理论,而实际上需要你自己去获取到数据以后变通着去显示。

 1  通过TIMFriendshipManager设置你的个人信息:

     在onSuccess方法中注释掉的方法是用来查看设置是否成功的。

public void setFaceMethod(String name,String img) {
        HashMap profileMap = new HashMap<>();
        profileMap.put(TIMFriendshipManager.TIM_PROFILE_TYPE_KEY_NICK, name);
        profileMap.put(TIMFriendshipManager.TIM_PROFILE_TYPE_KEY_GENDER, TIMFriendGenderType.Male.value());
        profileMap.put(TIMFriendshipManager.TIM_PROFILE_TYPE_KEY_FACEURL,BASE_RES_HEAD_URL + img);
        TIMFriendshipManager.getInstance().modifySelfProfile(profileMap, new TIMCallBack() {
            @Override
            public void onError(int code, String desc) {
                LogUtil.e( code + "设置失败" + desc);
            }

            @Override
            public void onSuccess() {
                LogUtil.e("设置成功");
                //                TIMFriendshipManager.getInstance().getSelfProfile(new TIMValueCallBack() {
                //                    @Override
                //                    public void onError(int i, String s) {
                //
                //                    }
                //
                //                    @Override
                //                    public void onSuccess(TIMUserProfile timUserProfile) {
                //                        LogUtil.e("昵称-->"+ timUserProfile.getNickName());
                //                        LogUtil.e("头像-->"+ timUserProfile.getFaceUrl());
                //                    }
                //                });
            }
        });
    }

2 设置成功以后,给聊天列表赋值,这里拿群聊举例说明:

 更新头像的方法:

 至于GlideUtil就是一个普通的Glide用法,不懂的请自行百度……

    public void setChatIconImg(String loginUser, final ImageView headImg, final TextView nickName){
        List users = new ArrayList<>();
        users.add(loginUser);
        TIMFriendshipManager.getInstance().getUsersProfile(users, true, new TIMValueCallBack>(){
            @Override
            public void onError(int code, String desc){
                LogUtil.e(code + " 获取失败 " + desc);
            }

            @Override
            public void onSuccess(List result){
                for(TIMUserProfile res : result){
                    GlideUtil.setUriMethod(context,res.getFaceUrl(),headImg);
                    nickName.setText(res.getNickName());
                }
            }
        });
    }

chatAdapter中,对于群聊头像、昵称的判断设置方法是

  if (msg.isSelf()) {
                setChatIconImg(msg.getFromUser(),chatHolder.userIcon,chatHolder.userName);
                     } else {
                 setChatIconImg(msg.getFromUser(),chatHolder.userIcon,chatHolder.userName);
                            }

这样,顺带着聊天的昵称也做了更换。

有两个问题

1 Glide的上下文Context获取

   需要从任何调用ChatAdapter的地方获取到,

   常用获取方法是创建有参构造方法:

 private Context context;

    public ChatAdapter(Context context){
        this.context = context;
    }

  2  Glide加载图片仅限于ImageView控件,而聊天的头像是继承了RelativeLayout的ChatIconView

      所以需要在显示了ChatIcomView的八个xml文件里,替换掉他们!

      唯有这样,才可以在不依靠腾讯IM技术支持的情况下完成头像的更改

 
        
            
            
            
            
            
            

最后的问题:

        为了Glide加载图片把ChatIconView替换成了ImageView,

        而ChatIconView有一个方法:

   public void invokeInformation(MessageInfo messageInfo) {
        mIconView.load();
        if (mDynamicView != null)
            mDynamicView.parseInformation(messageInfo);
    }

       在ChatAdapter中被调用了一次,

       我把它注释掉了,目前暂时没有看到什么后果……有的时候再说吧。

android 集成腾讯IMSDK4.2.9 TUIKIT即时通信之更改头像_第1张图片

        经确认,注释掉的方法不会影响到聊天

        有任何需要讨论的问题请联系

        QQ: 88627109

        欢迎您的到来

 

 

       

 

你可能感兴趣的:(工作总结,TUIKIT,腾讯IM,Android,聊天头像)