刚好做了一个项目用到环信,但是环信是不提供设置头像和昵称的以及其它一些需要的属性的,为了回话列表显示自己所需要的属性,所以只有自己动手了!
话不多说,开始。。。
在DemoHelper的类中找到getUserInfo方法替换成以下代码:
private EaseUser getUserInfo(String username) { //获取user信息,demo是从内存的好友列表里获取, //实际开发中,可能还需要从服务器获取用户信息, //从服务器获取的数据,最好缓存起来,避免频繁的网络请求 EaseUser user = null; //设置自己的头像 if (username.equals(EMClient.getInstance().getCurrentUser())) { user = new EaseUser(username); user.setAvatar(MyConfig.getImg()); user.setNick(MyConfig.getTruename()); return user; } else { //设置别人的头像 if (contactList != null && contactList.containsKey(username)) { } else { // 如果内存中没有,则将本地数据库中的取出到内存中。 getContactList(); } user = getContactList().get(username); if (user == null) { user = new EaseUser(username); } else { if (TextUtils.isEmpty(user.getNick())) { // 如果名字为空,则显示环信号码 user.setNick(user.getUsername()); } } return user; } }
当然你要想获取头像和昵称,以及其他属性,肯定是通过扩展消息获取的,正好环信是提供扩展消息功能的,也是符合用户自定义用的。
在DemoHelper中找到onMessageReceived方法,通过以下方法获取扩展消息:
Map<String, Object> ext = message.ext();
String userName = ext.get("userName").toString(); String userPic = ext.get("avatar").toString();
然后增加这些代码
String hxIdFrom = message.getFrom(); EaseUser easeUser = new EaseUser(hxIdFrom); easeUser.setAvatar(userPic); easeUser.setNick(userName); easeUser.setIs_private(isPrivate); easeUser.setType(message_type); if(patientId!=null){ easeUser.setPatient_id(patientId); }else{ easeUser.setPatient_id(""); } // 存入内存 getContactList(); DemoHelper.this.contactList.put(hxIdFrom, easeUser); // 存入db UserDao dao = new UserDao(DemoHelper.getInstance().appContext); dao.saveContact(easeUser); // List<EaseUser> users = new ArrayList<EaseUser>(); // users.add(easeUser); // dao.saveContactList(users); getModel().setContactSynced(true); // 通知listeners联系人同步完毕 notifyContactsSyncListener(true); EMLog.d(TAG, "onMessageReceived id : " + message.getMsgId()); // in background, do not refresh UI, notify it in notification bar if (!easeUI.hasForegroundActivies()) { getNotifier().onNewMsg(message); }
当然如果你需要其他属性,也可以在数据库去定义:
然后在DemoDBManager方法里加入相应的存储和获取的方法即可。
以上都是本地数据库操作。扩展消息根据环信的文档来。
好了,这样就有了自己的回话列表
如果有更好的方法欢迎一起来探讨!