欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2025/4/5 编程问答 54 豆豆
生活随笔 收集整理的这篇文章主要介绍了 环信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;@Overridepublic 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);//存入dbUserDao 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 barif(!easeUI.hasForegroundActivies()){getNotifier().onNewMsg(message);}}}@Overridepublic void onCmdMessageReceived(List<EMMessage> messages) {for (EMMessage message : messages) {EMLog.d(TAG, "receive command message");//get message bodyEMCmdMessageBody 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()));}}@Overridepublic void onMessageRead(List<EMMessage> messages) {}@Overridepublic void onMessageDelivered(List<EMMessage> message) {}@Overridepublic 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);}}@Overridepublic void onMessageChanged(EMMessage message, Object change) {EMLog.d(TAG, "change:");EMLog.d(TAG, "change:" + change);}};EMClient.getInstance().chatManager().addMessageListener(messageListener);}

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

@Overridepublic 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);//存入dbUserDao 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 barif(!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 avatarGlide.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

总结

以上是生活随笔为你收集整理的环信ease-sdk-3.3.4_r1 集成用户头像 昵称功能的简单处理方法的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。