您的位置:首页 > 其它

环信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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息