群组功能

功能概述

容联云通讯SDK 提供了群组和讨论组两种形式的群聊功能。群组拥有更多的权限操作,两种群聊形式在共有操作上保持了接口一致。
讨论组类似当前IM聊天应用内的快速多人会话,没有群组的权限操作,适用于快速创建多人会话的场景。每个讨论组只有一个管理员。管理员可以对讨论组进行增减员操作,普通成员也能对群进行增员操作。在添加新成员的时候,并不需要经过对方同意。
群组的功能更加完整和丰富,在权限上也拥有更多的限制(权限分为群主管理员、以及群成员)。可以设定被邀请模式(是否需要对方同意)群组可以拥有讨论组的全部功能,推荐使用群组进行开发。
 注意事项:
 1、创建的群组的时候注意传入的scope参数,基础版默认可传TEMP,专业版可传NORMAL,若需更大人数群组,请联系专有云商务或在控制台吗管理页面进行拓展。 
 2、群组中有三种成员角色,分别是群主、管理员(默认10个,群人数超过10人),普通成员。
 3、群主可以修改,群组信息,群名片,邀请人加入,踢人,解散群组,设置管理员,转让群主,设置群内禁言等。
 4、管理员可以修改群组公告,群名片,邀请人加入,设置群内禁言。
群组和讨论组的详细功能差异对比如下:
功能讨论组群组
群容量IM 专业版 300人/群,最大可扩展至 500 人/群(增值功能)IM 专业版 300人/群,最大可扩展至 2000 人/群(增值功能)                                                                             
创建创建时指定群组类型创建时指定群组类型
群资料属性                                                  讨论组名,讨论组类型,讨论组公告,讨论组扩展字段,讨论组资料修改,讨论组扩展字段修改群名,群公告,群扩展字段,
申请加入群组的验证模式,群邀请模式, 群资料修改,群资料扩展字段修改模式
邀请入群创建时邀请群主和管理员可以邀请
被邀请人同意模式                                                              不需要被邀请人同意支持配置: 需要被邀请人同意 不需要被邀请人同意
申请入群不支持支持
群成员类型群主、普通成员群主、管理员、普通成员
管理员设置不支持设置管理员群主可以增减管理员
群组资料修改权限群主可以修改群主,管理员可以设置
修改群成员昵称管理修改任何人群昵称,普通群成员只能修改自己的昵称群主、管理员可以修改所有人的群昵称。
普通成员只能修改普通群成员的群昵称。
修改自己的群昵称支持支持
消息类型支持文本,图片,附件,语音等文本,图片,附件,语音等
踢人不支持群主和管理员可以踢人,且管理员不能踢群主和其他管理员
主动退群普通群所有人都可以退群;
若群主退群,该群第一个加入的人是群主
除群主外,其他用户均可以主动退群。
群主需先将群转让给其他群成员才可以进行退群操作
禁言不支持管理员对普通成员禁言、解除禁言
转让群不支持群主可以将群的拥有者权限转给群内的其他成员,转移后,
被转让者变为新的群主,原群主变为普通成员。
群主还可以选择在转让的同时,直接退出该群。
解散群不支持群主可以解散群

群组消息

群组聊天和单人聊天是相同的,请参考消息收发文档。

群组管理

参考类: ECGroup 查看API
群组管理类:ECGroupManager查看API

创建群组

创建群包含创建群组和创建讨论组两种形式。二者的接口接口相同,传入不同的类型参数即可(Isdiscuss)。
API介绍
  1. void createGroup(ECGroup group,ECGroupManager.OnCreateGroupListener l)
  2. 创建群组
  3. 参数:
  4. group - 创建群组所需要的参数信息
  5. l - 创建群组请求回调
代码示例
我们假设Tony要创建一个名为"出彩中国人",具体代码如下:
  1. // 构建群组参数
  2. ECGroup group = new ECGroup();
  3. // 设置群组名称
  4. group.setName("出彩中国人");
  5. // 设置群组公告
  6. group.setDeclare("欢迎体验云通讯群组功能");
  7. // 设置群组类型,如:ECGroup.Scope.TEMP临时群组(100人)
  8. group.setScope(ECGroup.Scope.TEMP);
  9. // 设置群组验证权限,如:需要身份验证ECGroup.Permission.NEED_AUTH
  10. group.setPermission(ECGroup.Permission.NEED_AUTH);
  11. //是否是讨论组。false代表是群组、true代表是讨论组
  12. group.setIsdiscuss(false);
  13. // 获得SDK群组创建管理类
  14. ECGroupManager groupManager = ECDevice.getECGroupManager();
  15. // 调用创建群组接口,设置创建结果回调
  16. groupManager.createGroup(group, new ECGroupManager.OnCreatGroupListener() {
  17.     @Override
  18.     public void onCreatGroupComplete(ECError error, ECGroup group) {
  19.         if(error.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
  20.             // 群组/讨论组创建成功
  21.             // 缓存创建的群组/讨论组到数据库,同时通知UI进行更新
  22.             return ;
  23.         }
  24.         // 群组/讨论组创建失败
  25.         Log.e("ECSDK_Demo" , "create group fail , errorCode=" + error.errorCode);
  26.     }
  27.     @Override
  28.     public void onComplete(ECError error) {
  29.         // 不需要处理忽略
  30.     }});

主动加入

只要知道群组id,就可以主动加入群组。       
关于几种群组的解释:
公开群组:用户可以直接被允许加入群组,不需要群主或管理员进行验证;
验证群组:用户加入群组的时候需要群主或管理员同意才可以加入;
私有群组:只能群主或管理员邀请加入。       
  
API介绍
  1. void joinGroup(java.lang.String groupId,
  2.                java.lang.String declare,
  3.                ECGroupManager.OnJoinGroupListener l)
  4. 用户申请加入群组
  5. 参数:
  6. groupId - 申请加入的群组ID
  7. declare - 申请加入理由
  8. l - 申请结果回调
代码示例
我们假设"出彩中国人"群组已经有Tony和John两位成员,现在Smith要加入"出彩中国人"群组,则代码如下:             
  1. // 申请加入的群组id
  2. String groupId = "出彩中国人群组ID";
  3. // 设置申请加入理由
  4. String declare = "Smith申请加入群组";
  5. // 获得SDK群组管理类
  6. ECGroupManager groupManager = ECDevice.getECGroupManager();
  7. // 调用审请加入群组接口,设置结果回调
  8. groupManager.joinGroup(groupId, declare
  9.         , new ECGroupManager.OnJoinGroupListener() {
  10.     @Override
  11.     public void onJoinGroupComplete(ECError error, String groupId) {
  12.         if(SdkErrorCode.REQUEST_SUCCESS == error.errorCode)|| SdkErrorCode.MEMBER_ALREADY_EXIST == error.errorCode)) {
  13.             // 申请加入群组成功(SdkErrorCode.MEMBER_ALREADY_EXIST代表申请者已经是群组成员)
  14.             // 根据申请的群组权限(permission字段)来区分
  15.             // 是否直接加入成功或者需要管理员审核
  16.             if(permission == 1) {
  17.                 // 群组申请不需要验证,直接加入
  18.                 // 这里可以跳转到群组聊天界面、更新UI
  19.                 return;
  20.             }
  21.             Toast.makeText(Context , "申请加入群组成功,请等待管理员审核" ,
  22.                     Toast.LENGTH_SHORT).show();
  23.             return ;
  24.         }
  25.         // 群组申请失败
  26.         Log.e("ECSDK_Demo", "join group fail , errorCode="
  27.                 + error.errorCode);
  28.     }
  29.     @Override
  30.     public void onComplete(ECError error) {
  31.         // 不需要处理忽略
  32.     } 
  33.     });                      

申请加入群组请求通知

接收他人加入操作时,需要设置回调监听,参考文档:IM接收消息回调
示例代码
  1. @Override
  2. //"设置SDK接收消息回调"—OnChatReceiveListener
  3. public void OnReceiveGroupNoticeMessage(ECGroupNoticeMessage notice) {
  4.     if (notice == null) {
  5.         return;
  6.         
  7.     }
  8.     // 有人申请加入群组(仅限于管理员)
  9.     if (notice.getType() == ECGroupNoticeMessage.ECGroupMessageType.PROPOSE) {
  10.         ECProposerMsg proposerMsg = (ECProposerMsg) notice;
  11.         // 处理申请加入群组请求通知
  12.     }
  13. }
                       

同意加入

群主或者管理员,可以进行同意他人进群的操作。
API介绍
  1. void ackJoinGroupRequest(java.lang.String groupId,
  2.                          java.lang.String member,
  3.                          ECAckType type,
  4.                          ECGroupManager.OnAckJoinGroupRequestListener l)
  5. 管理员验证用户申请加入群组
  6. 参数:
  7. groupId - 申请的群组ID
  8. member - 申请者账号
  9. type - 验证回复类型(同意或者拒绝)
  10. l - 回复结果回调
  
示例代码             
Tony同意Smith加入的请求,代码如下:                 
  1. // 创建回复验证参数响应状态 ECAckType.AGREE:通过 ECAckType.REJECT:拒绝
  2. ECAckType ackType = ECAckType.AGREE;
  3. // 所属的群组ID
  4. String groupId = "出彩中国人群组ID";
  5. // 申请者账号ECProposerMsg.getProposer()
  6. String proposer = "Smith的账号";
  7. // 获得SDK群组管理类
  8. ECGroupManager groupManager = ECDevice.getECGroupManager();
  9. // 调用验证申请群组接口,设置结果回调
  10. groupManager.ackJoinGroupRequest(groupId, proposer, ackType ,
  11.         new ECGroupManager.OnAckJoinGroupRequestListener() {
  12.             @Override
  13.             public void onAckJoinGroupRequestComplete(ECError error
  14.                     , String groupId, String member) {
  15.                 if(error.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
  16.                     // 回复群组申请成功
  17.                     return ;
  18.                 }
  19.                 // 回复群组申失败
  20.                 Log.e("ECSDK_Demo", "ack group apply fail , errorCode="
  21.                         + error.errorCode);
  22.             }
  23.             @Override
  24.             public void onComplete(ECError error) {
  25.                 // 忽略
  26.             }
  27.           } 
  28.         ); 
       

成员加入通知

Smith加入成功后,群组中成员Tony和John收到的通知回调方法代码如下:(参考Demo中的IMChattingHelper.java)
参考文档:IM接收消息回调
  1. //该通知回调接口是初始化时设置的 "设置SDK接收消息回调"—OnChatReceiveListener
  2. @Override
  3. public void OnReceiveGroupNoticeMessage(ECGroupNoticeMessage notice) {
  4.     if (notice == null) {
  5.         return;
  6.     }
  7.     // 有人退出群组通知(群组成员)
  8.     if (notice.getType() == ECGroupNoticeMessage.ECGroupMessageType.QUIT) {
  9.         ECQuitGroupMsg quitGroupMsg = (ECQuitGroupMsg) notice;
  10.         // 处理某人退出群组通知
  11.     }}

邀请加入

只能群主或管理员邀请别人加入群组。
API介绍            
  1. void inviteJoinGroup(java.lang.String groupId,
  2.                      java.lang.String reason,
  3.                      java.lang.String[] members,
  4.                      ECGroupManager.InvitationMode confirm,
  5.                      ECGroupManager.OnInviteJoinGroupListener l)
  6. 管理员邀请加入群组
  7. 参数:
  8. groupId - 邀请加入的群组ID
  9. reason - 邀请加入群组的邀请愿意members - 邀请的成员
  10. confirm - ECGroupManager.InvitationMode.NEED_CONFIRM 需要对方验证, ECGroupManager.InvitationMode.FORCE_PULL 不需要对方验证
  11. l - 邀请结果回调
代码示例     
我们假设"出彩中国人"群组的创建者Tony邀请Smith加入群组,则代码如下:(参考Demo中的CreateGroupActivity.java)
  1.  // 设置群组ID
  2.  String groupId = "出彩中国人群组ID";
  3.  // 设置邀请加入理由
  4.  String declare = "Tony邀请Smith加入群组";
  5.  // 设置邀请加入的群组成员(可多选)
  6.  String[] members = new String[]{"Smith的账号"};
  7.  // 是否需要对方确认(NEED_CONFIRM 需要对方验证,FORCE_PULL 不需要对方验证)
  8.  ECGroupManager.InvitationMode confirm = ECGroupManager.InvitationMode.NEED_CONFIRM;
  9.  // 获得SDK群组管理类
  10.  ECGroupManager groupManager = ECDevice.getECGroupManager();
  11.  // 调用邀请加入群组接口,设置结果回调
  12. groupManager.inviteJoinGroup(groupId,declare,members,confim,new ECGroupManager.OnInviteJoinGroupListener() {
  13.     @Override
  14.     public void onComplete(ECError error) {
  15.         // 可以忽略不需要处理
  16.     }
  17.     @Override
  18.     public void onInviteJoinGroupComplete(ECError error
  19.             , String groupId, String[] members) {
  20.         if(error.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
  21.             // 邀请加入成功 ,1默认是直接就拉进群组
  22.             if(confim == 1) {
  23.                 // 直接拉进群组,不需要被邀请成员是否同意
  24.                 return ;
  25.             }
  26.             Toast.makeText(Context , "邀请加入群组成功,请等待Smith验证" ,
  27.                     Toast.LENGTH_SHORT).show();
  28.             return ;
  29.         }
  30.         // 群组邀请成员失败
  31.         Log.e("ECSDK_Demo", "invite join group fail , errorCode="
  32.                 + error.errorCode);
  33.     }
  34.     }
  35.     );                      

用户验证管理员邀请加入群组

如果Tony邀请Smith加入的时候,接口参数不指定加入需要Smith确认,则smith直接被邀请加入。如果指定需要Smith
同意才能加入,则Smith收到如下通知回调,并在回调里面回复"同意"或"拒绝"加入。参考文档:IM接收消息回调。           
API介绍
  1. void ackInviteJoinGroupRequest(java.lang.String groupId,
  2.                                ECAckType type,
  3.                                java.lang.String invitee,
  4.                                ECGroupManager.OnAckInviteJoinGroupRequestListener l)
  5. 用户验证管理员邀请加入群组
  6. 参数:
  7. groupId - 邀请加入的群组ID
  8. type - 回复类型(同意或者拒绝)
  9. l - 回复结果回调
                
代码示例                           
  1. //该通知回调接口是初始化时设置的 "设置SDK接收消息回调"—OnChatReceiveListener
  2. @Override
  3. public void OnReceiveGroupNoticeMessage(ECGroupNoticeMessage notice) {
  4.     if (notice == null) {
  5.         return;
  6.     }
  7.     // 有人加入群组通知(群组成员)
  8.     if (notice.getType() == ECGroupNoticeMessage.ECGroupMessageType.INVITE) {
  9.         ECInviterMsg inviterMsg = (ECInviterMsg) notice;
  10.         // 处理群组管理员邀请加入群组通知
  11.         String groupId = inviterMsg.getGroupId();
  12.     }} 
  13. // 创建回复验证参数响应状态
  14. // ECAckType.AGREE:通过 ECAckType.REJECT:拒绝
  15. ECAckType ackType = ECAckType.AGREE;
  16. // 所属的群组ID
  17. String groupId = "出彩中国人群组ID";
  18. // 邀请者账号(ECInviterMsg.getAdmin())
  19. String inviter = "Tony的账号";
  20. // 获得SDK群组创建管理类
  21. ECGroupManager groupManager = ECDevice.getECGroupManager();
  22. // 调用回复邀请加入群组接口,设置结果回调
  23. groupManager.ackInviteJoinGroupRequest(groupId, ackType,inviter,
  24.         new ECGroupManager.OnAckInviteJoinGroupRequestListener() {
  25.             @Override
  26.             public void onAckInviteJoinGroupRequestComplete(ECError error , 
  27.                                                             String groupId) {
  28.                 if (error.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
  29.                     // 回复群组邀请成功
  30.                     return;
  31.                 }
  32.                 // 回复群组邀请失败
  33.                 Log.e("ECSDK_Demo", "ack group apply fail , errorCode="
  34.                         + error.errorCode);
  35.             }
  36.             @Override
  37.             public void onComplete(ECError error) {
  38.                 // 忽略
  39.             }
  40.         } 
  41.       );                                            

退出群组

API介绍     
  1. void quitGroup(java.lang.String groupId,
  2.                ECGroupManager.OnQuitGroupListener l)
  3. 退出群组
  4. 参数:
  5. groupId - 群组 ID
  6. l - 退出结果
代码示例        
我们假设Smith要退出群组,则代码如下:                                 
  1. // 设置需要退出的群组id
  2. String groupId = "出彩中国人群组ID";
  3. // 获得SDK群组创建管理类
  4. ECGroupManager groupManager = ECDevice.getECGroupManager();
  5. // 调用退出群组接口,设置结果回调
  6. groupManager.quitGroup(groupId, new ECGroupManager.OnQuitGroupListener() {
  7.     @Override
  8.     public void onQuitGroupComplete(ECError error, String groupId) {
  9.         if (error.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
  10.             // 退出群组成功
  11.             // 这里可以删除本地群组缓存,删除群组聊天纪录等
  12.             return;
  13.         }
  14.         // 退出群组失败
  15.         Log.e("ECSDK_Demo", "quit group fail , errorCode="
  16.                 + error.errorCode);
  17.     }
  18.     @Override
  19.     public void onComplete(ECError error) {
  20.         // 忽略
  21.     }});                                

退出群组通知       

退出群组成功后,群组中的成员会收到通知。设置位置参考文档:IM接收消息回调
代码示例
Smith退出成功后,群组中成员Tony和John收到的通知回调方法代码如下:(参考Demo中的IMChattingHelper.java)
                                 
  1. //该通知回调接口是初始化时设置的 "设置SDK接收消息回调"—OnChatReceiveListener
  2. @Override
  3. public void OnReceiveGroupNoticeMessage(ECGroupNoticeMessage notice) {
  4.     if (notice == null) {
  5.         return;
  6.     }
  7.     // 有人退出群组通知(群组成员)
  8.     if (notice.getType() == ECGroupNoticeMessage.ECGroupMessageType.QUIT) {
  9.         ECQuitGroupMsg quitGroupMsg = (ECQuitGroupMsg) notice;
  10.         // 处理某人退出群组通知
  11.     } 
  12.     }                                                

群主踢人

只有群主可以进行踢人操作。
API介绍
  1. void deleteGroupMember(java.lang.String groupId,
  2.                        java.lang.String member,
  3.                        ECGroupManager.OnDeleteGroupMembersListener l)
  4. 删除成员
  5. 参数:
  6. groupId - 群组ID
  7. member - 移除的成员
  8. l - 移除结果回调
 
代码示例               
我们假设群主Tony要把Smith要踢出群组,则代码如下:                                   
  1. // Smith所在的群组id
  2. String grouId = "出彩中国人群组ID";
  3. // Smith账号
  4. String member = "Smith的账号";
  5. // 获得SDK群组创建管理类
  6. ECGroupManager groupManager = ECDevice.getECGroupManager();
  7. // 调用群组移除成员接口,设置结果回调
  8. groupManager.deleteGroupMember(grouId, member,
  9.         new ECGroupManager.OnDeleteGroupMembersListener() {
  10.     @Override
  11.     public void onDeleteGroupMembersComplete(ECError error
  12.             , String groupId, String members) {
  13.         if(error.errorCode == SdkErrorCode.REQUEST_SUCCESS){
  14.             // 移除成员成功
  15.             // 将Smith账号从本地群组关联关系中移除
  16.             // 通知UI更新
  17.             return;
  18.         }
  19.         // 退出群组失败
  20.         Log.e("ECSDK_Demo", "remove group member fail " +
  21.                 ", errorCode=" + error.errorCode);
  22.     }
  23.     @Override
  24.     public void onComplete(ECError error) {
  25.         // 忽略不处理
  26.     } 
  27.     });        
                             

移除成员通知

群组中所有成员都会收到的Smith被踢的消息,包括Smith自己,Smith判断被踢用户的id等于自己,则从本地删除群组,此通知回调方法代码如下:(参考Demo中的IMChattingHelper.java) 。设置回调参考文档: IM接收消息回调。                   
  1. //该通知回调接口是初始化时设置的 "设置SDK接收消息回调"—OnChatReceiveListener
  2. @Override
  3. public void OnReceiveGroupNoticeMessage(ECGroupNoticeMessage notice) {
  4.     if (notice == null) {
  5.         return;
  6.     }
  7.     // 有人被移除出群组
  8.     if (notice.getType() == 
  9.             ECGroupNoticeMessage.ECGroupMessageType.REMOVE_MEMBER) {
  10.         ECRemoveMemberMsg removeMemberMsg = (ECRemoveMemberMsg) notice;
  11.         // 处理群组移除成员通知
  12.         if ("Smith账号".equals(removeMemberMsg.getMember())) {
  13.             // 如果是自己则将从本地群组关联关系中移除
  14.             // 通知UI处理刷新
  15.         }
  16.     } }                                                

解散群组

只有群主才能解散群组。
API介绍           
  1. void deleteGroup(java.lang.String groupId,
  2.                  ECGroupManager.OnDeleteGroupListener l)
  3. 删除群组
  4. 参数:
  5. groupId - 需要被删除的群组ID
  6. l - 删除群组回调
 
代码示例     
我们假设群主Tony要解散"出彩中国人",则代码如下:                                       
  1. // 被解散的群组id
  2. String grouId = "出彩中国人群组ID";
  3. // 获得SDK群组创建管理类
  4. ECGroupManager groupManager = ECDevice.getECGroupManager();
  5. // 调用群组移解散接口,设置结果回调
  6. groupManager.deleteGroup(groupId, new ECGroupManager.OnDeleteGroupListener() {
  7.     @Override
  8.     public void onDeleteGroupComplete(ECError error, String groupId) {
  9.         if(error.errorCode == SdkErrorCode.REQUEST_SUCCESS){
  10.             // 群组解散成功
  11.             // 将群组信息从本地缓存中删除 通知UI更新
  12.             return;
  13.         }
  14.         // 解散群组失败
  15.         Log.e("ECSDK_Demo", "del group fail " +
  16.                 ", errorCode=" + error.errorCode);
  17.     }
  18.     @Override
  19.     public void onComplete(ECError error) {
  20.         // 忽略不处理
  21.     } 
  22.     });     
                

群组解散通知

群组中所有成员收到的通知回调方法代码如下,设置回调参考文档: IM接收消息回调。                                            
  1. //该通知回调接口是初始化时设置的 "设置SDK接收消息回调"—OnChatReceiveListener
  2. @Override
  3. public void OnReceiveGroupNoticeMessage(ECGroupNoticeMessage notice) {
  4.     if (notice == null) {
  5.         return;
  6.     }
  7.     // 群组被解散
  8.     if (notice.getType() ==ECGroupNoticeMessage.ECGroupMessageType.DISMISS) {
  9.         ECDismissGroupMsg dismissGroupMsg = (ECDismissGroupMsg) notice;
  10.         // 处理群组被解散通知
  11.         // 将群组从本地缓存中删除并通知UI刷新
  12.     } 
  13.     }                                     

获取群成员

API介绍
  1. void queryGroupMembers(java.lang.String groupId,
  2.                        ECGroupManager.OnQueryGroupMembersListener l)
  3. 查询群组成员
  4. 参数:
  5. groupId - 需要查询的成员所在的群组ID
  6. l - 查询结果
代码示例
代码如下:(参考Demo中的GroupMemberService.java)                                       
  1. // 需要获取群组成员的群组id
  2. String grouId = "出彩中国人群组ID";
  3. // 获得SDK群组管理类
  4. ECGroupManager groupManager = ECDevice.getECGroupManager();
  5. // 调用获取群组成员接口,设置结果回调
  6. groupManager.queryGroupMembers(groupId,
  7.         new ECGroupManager.OnQueryGroupMembersListener() {
  8.             @Override
  9.             public void onQueryGroupMembersComplete(ECError error
  10.                     , List<ECGroupMember> members) {
  11.                 if (error.errorCode == SdkErrorCode.REQUEST_SUCCESS && members != null) {
  12.                     // 获取群组成员成功
  13.                     // 将群组成员信息更新到本地缓存中(sqlite) 通知UI更新
  14.                     return;
  15.                 }
  16.                 // 群组成员获取失败
  17.                 Log.e("ECSDK_Demo", "sync group detail fail " +
  18.                         ", errorCode=" + error.errorCode);
  19.             }
  20.             @Override
  21.             public void onComplete(ECError error) {
  22.                 // 忽略不处理
  23.             }
  24.         });

群组搜索

可以根据群组名字或者群组ID来搜索群组(群组名称为纯数字或纯字母时需要输入完整的群名称) 。 (参考Demo中的SearchGroupActivity.java)
API介绍
  1. void searchPublicGroups(ECGroupMatch match,
  2.                         ECGroupManager.OnSearchPublicGroupsListener l)
  3. 按条件搜索公共群组
  4. 参数:
  5. match - 群组搜索条件
  6. l - 搜索结果回调
代码示例
  1. // 创建查询参数规则(按照群组id检索)
  2. ECGroupMatch match = new ECGroupMatch(ECGroupMatch.SearchType.GROUPID);
  3. // 设置检索词(根据匹配规则输入群组I的或者名称)
  4. match.setkeywords("出彩的中国人");
  5. // 获得SDK群组管理类
  6. ECGroupManager groupManager = ECDevice.getECGroupManager();
  7. // 调用检索群组接口,设置结果回调
  8. groupManager.searchPublicGroups(match, 
  9.         new ECGroupManager.OnSearchPublicGroupsListener() {
  10.     @Override
  11.     public void onSearchPublicGroupsComplete(ECError error
  12.             , List<ECGroup> groups) {
  13.         if (error.errorCode == SdkErrorCode.REQUEST_SUCCESS && groups != null){
  14.             // 检索群组成功
  15.             // 根据查询到的群组选择是否申请加入群组
  16.             return;
  17.         }
  18.         // 检索群组取失败
  19.         Log.e("ECSDK_Demo", "search group fail " +
  20.                 ", errorCode=" + error.errorCode);
  21.     }
  22.     @Override
  23.     public void onComplete(ECError error) {
  24.         // 忽略不需要处理
  25.     }});                                   

获取个人所在的群组

查询自己创建或者加入的全部群组或者讨论组。
API介绍
  1. void queryOwnGroups(ECGroupManager.Target target,
  2.                     ECGroupManager.OnQueryOwnGroupsListener l)
  3. 查询加入的群组
  4. 参数:
  5. l - 结果回调
  6. target - 返回值类型
代码示例
用户登录后,通常首先调取此接口获取自己所在群组/讨论组,此接口会返回群组的id、名称、免打扰状态等信息,其示例代码如下:                                    
  1. // 获得SDK群组创建管理类
  2. ECGroupManager groupManager = ECDevice.getECGroupManager();
  3. // 调用查询个人加入的群组接口,设置结果回调
  4. //Target.Group是群组,Target.Discussion是讨论组
  5. groupManager.queryOwnGroups(Target.Groupnew ECGroupManager.OnQueryOwnGroupsListener() {
  6.     @Override
  7.     public void onQueryOwnGroupsComplete(ECError error, List groups){
  8.         if(SdkErrorCode.REQUEST_SUCCESS == error.errorCode) {
  9.             // 请求成功
  10.             // 进行本地数据库与服务器数据同步
  11.             // 删除不存在或者没有加入的群组
  12.             return ;
  13.         }
  14.         // 查询个人加入的群组失败
  15.         Log.e("ECSDK_Demo", "query own groups fail " +
  16.                 ", errorCode=" + error.errorCode);
  17.     }
  18.     @Override
  19.     public void onComplete(ECError error) {
  20.         // 忽略
  21.     } 
  22.     });               
  23.