使用环境:
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中被调用了一次,
我把它注释掉了,目前暂时没有看到什么后果……有的时候再说吧。
经确认,注释掉的方法不会影响到聊天
有任何需要讨论的问题请联系
QQ: 88627109
欢迎您的到来