环信

03_环信集成 app 即时通讯功能基础-好友列表

2017-10-16  本文已影响39人  Android_小生

即时通讯功能的相关界面主要就是会话列表界面,好友列表界面和聊天界面。下面先介绍下好友列表界面的相关环信 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);
   }
});

在好友状态的监听事件的回调方法中进行具体操作,如上代码所示。

文章只是作为自己记录学习使用,如果有使用不当的地方可以@我,谢谢。
参考文章:环信开发文档

上一篇下一篇

猜你喜欢

热点阅读