環(huán)信服務器并不保存用戶的頭像用戶名,但實際開發(fā)需要設置用戶昵稱頭像。下面提供一個簡單的辦法設置用戶的頭像昵稱,這里的頭像昵稱從自己的服務器獲取的并且保存到本地。
1.服務端的設計
服務端設計比較簡單,提供個接口,用戶傳入自己的環(huán)信ID(用戶名)得到相關的用戶列表信息,其中包含用戶頭像昵稱還有其他一些你需要的信息
2.手機端的實現(xiàn)
找了半天找到環(huán)信設置用戶頭像的方法在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 : 處理紅包回執(zhí)透傳消息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)
是全局的消息監(jiān)聽,這兒收到消息后去對比從我們服務器請求的用戶數(shù)據(jù)并且設置相應的頭像用戶名到數(shù)據(jù)庫中。自己的服務器的數(shù)據(jù)我做了本地緩存.用到的時候取出即可。只要改如下方法即可
@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 集成用户头像 昵称功能的简单处理方法的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。