即时通讯功能的相关界面主要就是会话列表界面,好友列表界面和聊天界面。下面先介绍下好友列表界面的相关环信 API 方法。
获取好友列表
List<String> usernames = EMClient.getInstance().contactManager().getAllContactsFromServer();
这是一个同步方法,我们可以开启一个线程来处理。我们可以创建自己的好友对象来继承 EMContact 类,将获取的集合列表传递给应用后台返回好友具体的信息,以 EMContact 对象的形式保存到本地数据库。
当好友列表发生变化时,设置 EMContactListener
接口监听变化,及时刷新好友列表。
EMClient.getInstance().contactManager().setContactListener(new EMContactListener());
添加好友
//参数为要添加的好友的username和添加理由
EMClient.getInstance().contactManager().addContact(toAddUsername, reason);
删除好友
EMClient.getInstance().contactManager().deleteContact(username);
同意好友请求
EMClient.getInstance().contactManager().acceptInvitation(username);
拒绝好友请求
EMClient.getInstance().contactManager().declineInvitation(username);
监听好友状态事件
监听事件中的方法回调,实现了好友列表界面中的大多数需求,包括增加了联系人、自己被好友删除、收到好友的邀请、自己发送的好友邀请被同意、自己发送的好友邀请被拒绝。
EMClient.getInstance().contactManager().setContactListener(new EMContactListener() {
@Override
public void onFriendRequestAccepted(String username) {
//好友请求被同意
List<InviteMessage> msgs = inviteMessgeDao.getMessagesList();
for (InviteMessage inviteMessage : msgs) {
if (inviteMessage.getFrom().equals(username)) {
return;
}
}
// save invitation as message
InviteMessage msg = new InviteMessage();
msg.setFrom(username);
msg.setTime(System.currentTimeMillis());
showToast(username + " accept your to be friend");
msg.setStatus(InviteMessageStatus.BEAGREED);
notifyNewInviteMessage(msg);
broadcastManager.sendBroadcast(new Intent(Constant.ACTION_CONTACT_CHANAGED));
}
@Override
public void onFriendRequestDeclined(String username) {
//好友请求被拒绝
// your request was refused
showToast(username + " refused to be your friend");
}
@Override
public void onContactInvited(String username, String reason) {
//收到好友邀请
List<InviteMessage> msgs = inviteMessgeDao.getMessagesList();
for (InviteMessage inviteMessage : msgs) {
if (inviteMessage.getGroupId() == null && inviteMessage.getFrom().equals(username)) {
inviteMessgeDao.deleteMessage(username);
}
}
// save invitation as message
InviteMessage msg = new InviteMessage();
msg.setFrom(username);
msg.setTime(System.currentTimeMillis());
msg.setReason(reason);
showToast(username + "apply to be your friend,reason: " + reason);
// set invitation status
msg.setStatus(InviteMessageStatus.BEINVITEED);
notifyNewInviteMessage(msg);
broadcastManager.sendBroadcast(new Intent(Constant.ACTION_CONTACT_CHANAGED));
}
@Override
public void onContactDeleted(String username) {
//被删除时回调此方法
Map<String, EaseUser> localUsers = DemoHelper.getInstance().getContactList();
localUsers.remove(username);
userDao.deleteContact(username);
inviteMessgeDao.deleteMessage(username);
EMClient.getInstance().chatManager().deleteConversation(username, false);
broadcastManager.sendBroadcast(new Intent(Constant.ACTION_CONTACT_CHANAGED));
showToast("onContactDeleted:" + username);
}
@Override
public void onContactAdded(String username) {
//增加了联系人时回调此方法
Map<String, EaseUser> localUsers = getContactList();
Map<String, EaseUser> toAddUsers = new HashMap<String, EaseUser>();
EaseUser user = new EaseUser(username);
if (!localUsers.containsKey(username)) {
userDao.saveContact(user);
}
toAddUsers.put(username, user);
localUsers.putAll(toAddUsers);
broadcastManager.sendBroadcast(new Intent(Constant.ACTION_CONTACT_CHANAGED));
showToast("onContactAdded:" + username);
}
});
在好友状态的监听事件的回调方法中进行具体操作,如上代码所示。
文章只是作为自己记录学习使用,如果有使用不当的地方可以@我,谢谢。
参考文章:环信开发文档