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

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

作者: Android_小生 | 来源:发表于2017-10-16 17:47 被阅读39次

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

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

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

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/owwzyxtx.html