环信服务器并不保存用户的头像用户名,但实际开发需要设置用户昵称头像。下面提供一个简单的办法设置用户的头像昵称,这里的头像昵称从自己的服务器获取的并且保存到本地。
1.服务端的设计
服务端设计比较简单,提供个接口,用户传入自己的环信ID(用户名)得到相关的用户列表信息,其中包含用户头像昵称还有其他一些你需要的信息
2.手机端的实现
找了半天找到环信设置用户头像的方法在DemoHelper这个类中,直接贴代码吧
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//接收并处理扩展消息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()//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//接收并处理扩展消息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找到这个方法
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 =
"";
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 集成用户头像 昵称功能的简单处理方法的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。