环信ease-sdk-3.3.4_r1 集成用户头像 昵称功能的简单处理方法
2017-09-11 17:07
453 查看
环信服务器并不保存用户的头像用户名,但实际开发需要设置用户昵称头像。下面提供一个简单的办法设置用户的头像昵称,这里的头像昵称从自己的服务器获取的并且保存到本地。
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
相关文章推荐
- 环信(Android)设置头像和昵称的方法(最简单暴力的基于环信demo的集成)。
- 环信(Android)设置头像和昵称的方法(最简单暴力的基于环信demo的集成)
- 环信(Android)设置头像和昵称的方法(最简单暴力的基于环信demo的集成)。
- SpringMVC(27):json数据的传递处理的示例(实现功能:使用jQuery框架的ajax()方法实现用户信息查看)
- ---Ubuntu下, Adroid 2.3/4.x SDK 编译问题的简单处理方法
- android用户中心头像选择功能的方法实现
- 集成环信3.0 处理UI上展示昵称、头像的方法
- thinkphp中create()方法实现简单的用户注册表单验证功能
- Android集成友盟分享SDK出现的 "微信发送被拒绝"" 的错误的处理方法
- 聊聊Android端集成环信头像和昵称的处理
- asp简单的广告过滤处理方法
- 一个简单的在页面处理图片大小的方法
- 第4代白盒测试方法实践之“如何在VcTester集成自动构建功能”
- 导入Excel和导出Excel的简单方法与程序处理方法,使用Excel程序读写Excel ,实现Excel的多个 Sheets读写并导出
- 一种简单的不依赖于编程语言的异常处理方法
- WEb 修改AD域用户密码最简单直接的方法
- Debian下中文字体模糊的简单处理方法
- SQL2005 sa islock 用户不能正常登录的处理方法
- 关于存储过程中一个参数表示多个查询条件使用方法的简单处理
- 实现在线用户列表的简单方法