Android 环信在选择联系人的时候没有群组:
之前做了环信的自定义消息:环信自定义消息
在做消息转发以及分享的时候需要跳转到选择联系人界面。但是发现默认只有具体的联系人,并没有群组。
所以只能是靠自己实现了:
1.PickContactNoCheckboxActivity类是选择联系人界面的基类,在这个类中有一个方法时获取联系人getContactList()。需要在这个方法中将群组列表添加进去:
//TODO 添加群组
List<EMGroup> allGroups = EMClient.getInstance().groupManager().getAllGroups();
for (EMGroup emGroup : allGroups) {
String username = emGroup.getGroupId();
String nick = emGroup.getGroupName();
EaseUser user = new EaseUser(username);
user.setNick(nick);
user.setAvatar(R.drawable.em_group_icon + "");
user.setFlag(true);
contactList.add(user);
}
注意:
Map<String, EaseUser> users = DemoHelper.getInstance().getContactList();
这个方法是获取好友集合,一定要将DemoHelper类的getContactList()方法进行修改,每次都要在数据库获取,而不是内存,不然数据有重复。
public Map<String, EaseUser> getContactList() {
if (isLoggedIn() && contactList == null) {
contactList = demoModel.getContactList();
}
//TODO 用来删除已添加的群组
if (contactList != null) {
contactList.clear();
contactList = demoModel.getContactList();
}
// return a empty non-null object to avoid app crash
if (contactList == null) {
return new Hashtable<String, EaseUser>();
}
return contactList;
}
2.在EaseUser类中添加一个字段,用来区分是好友或者群组;
3.在EaseContactAdapter类getView()方法中,判断是好友还是群组,用来区分加载不同的头像:
//TODO 个人(单聊)
if (!user.getFlag()) {
EaseUserUtils.setUserNick(username, holder.nameView);
EaseUserUtils.setUserAvatar(getContext(), username, holder.avatar);
} else {//群组(群聊)
holder.nameView.setText(user.getNick());
try {
int avatarResId = Integer.parseInt(user.getAvatar());
Glide.with(context).load(avatarResId).into(holder.avatar);
} catch (Exception e) {
//use default avatar
Glide.with(context).load(user.getAvatar()).diskCacheStrategy(DiskCacheStrategy.ALL).placeholder(R.drawable.ease_default_avatar).into(holder.avatar);
}
}
4..在ForwardMessageActivity类onListItemClick()方法中进行判断不同的跳转,用来区分是单聊还是群聊。
@Override
protected void onListItemClick(int position) {
selectUser = contactAdapter.getItem(position);
new EaseAlertDialog(this, null, getString(R.string.confirm_forward_to, selectUser.getNick()), null, new AlertDialogUser() {
@Override
public void onResult(boolean confirmed, Bundle bundle) {
if (confirmed) {
if (selectUser == null)
return;
try {
ChatActivity.activityInstance.finish();
} catch (Exception e) {
}
//TODO 单聊/群组聊天
boolean flag = selectUser.getFlag();
if (!flag) {
Intent intent = new Intent(ForwardMessageActivity.this, ChatActivity.class);
// it is single chat
intent.putExtra("userId", selectUser.getUsername());
intent.putExtra("forward_msg_id", forward_msg_id);
startActivity(intent);
} else {
Intent intent = new Intent(ForwardMessageActivity.this, ChatActivity.class);
intent.putExtra("chatType", Constant.CHATTYPE_GROUP);
intent.putExtra("forward_msg_id", forward_msg_id);
intent.putExtra("userId", selectUser.getUsername());
startActivity(intent);
}
finish();
}
}
}, true).show();
}
修改聊天界面输入框背景:
在easeui库中找的EaseChatPrimaryMenu类,全局搜索edittext_layout,将设置的背景改成自己OK了。