RoomParticipantStore 是 AtomicXCore 中专用于房间成员管理的模块。该模块为研讨会场景提供了核心能力,支持构建完整的成员管理体系。

功能介绍
研讨会成员管理模块涵盖了房间内用户信息展示以及权限处理的全套能力:
双角色列表展示: 动态呈现房间内嘉宾列表与观众列表,展示昵称、角色、音频状态。
嘉宾与观众互转: 支持将观众提升为嘉宾赋予发言权限,或将嘉宾降级为观众。
权限控制: 支持房主或管理员执行将成员移出房间、全员禁言等管理操作。
分级管理: 支持对房主、管理员、嘉宾及观众实现差异化的权限策略。
核心功能
获取嘉宾列表:获取当前房间内的嘉宾列表,嘉宾可以开启麦克风与其他嘉宾进行语音互动。
获取观众列表:获取当前房间内观众列表信息。
搜索房间内成员:搜索所在房间内的指定用户。
将观众提升为嘉宾:将观众提升为嘉宾,提升为嘉宾的用户可以开启麦克风与房间内其他的嘉宾互动。
将嘉宾降级为观众:将嘉宾降级为观众, 降级为观众的用户无法与房间内的嘉宾进行语音互动。
设置/撤销管理员:房主可以设置房间其他成员为管理员,同时也可撤销房间内的管理员。
将成员移出房间:房主或者管理员可以将房间内任意一名成员移出房间。
核心概念
在开始集成之前,需要通过下表了解一下
RoomParticipantStore 相关的几个核心概念:核心概念 | 类型 | 核心职责与描述 |
data class | 代表嘉宾的核心数据模型,封装了嘉宾的完整信息和状态管理能力,可以开启/关闭 麦克风。 核心功能包括:嘉宾基本信息管理(用户 ID 、用户名称、用户头像、房间内角色身份)、设备状态管理(麦克风状态,摄像头状态,屏幕分享状态,消息状态)。 | |
data class | 代表房间内成员状态管理的核心数据结构,负责维护房间内成员相关状态信息。 核心属性: participantList 嘉宾列表。audienceList 观众列表。adminList 管理员列表。localParticipant 代表自身所在房间内的信息。 | |
abstract class | 代表房间内成员相关的实时事件。 | |
abstract class | 这是成员控制相关的核心类。功能包含:控制房间内嘉宾音视频状态、执行成员管理,嘉宾观众角色切换等操作,并通过订阅其 RoomParticipantListener 来接收实时事件。 |
实现步骤
步骤1:组件集成
步骤2:获取嘉宾列表
在加入房间后,调用
RoomParticipantStore 的 getParticipantList 接口获取到房间内嘉宾列表。import android.util.Logimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStoreimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantimport io.trtc.tuikit.atomicxcore.api.ListResultCompletionHandlerfun getParticipantList() {// 1. 业务逻辑说明// 前提:需要先完成进房操作,通过进房的roomID创建RoomParticipantStore实例val roomID = "webinar_123456"val participantStore = RoomParticipantStore.create(roomID)// 2. 首次获取嘉宾列表(从头开始)// 支持分页加载,可以通过 cursor 参数实现增量获取val initialCursor: String? = null // null 表示从第一页开始获取participantStore.getParticipantList(initialCursor, object : ListResultCompletionHandler<RoomParticipant> {override fun onSuccess(result: List<RoomParticipant>, cursor: String) {Log.d("Participant", "成功获取嘉宾列表,数量: ${result.size}")}override fun onFailure(code: Int, desc: String) {Log.e("Participant", "获取嘉宾失败 [错误码: $code]: $desc")}})}
步骤3:获取观众列表
在加入房间后,通过调用
RoomParticipantStore 的 getAudienceList 接口获取房间内的观众列表。import android.util.Logimport io.trtc.tuikit.atomicxcore.api.ListResultCompletionHandlerimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStoreimport io.trtc.tuikit.atomicxcore.api.room.RoomUserfun getAudienceList() {// 前提:需要先完成进房操作, 并且进房时 roomType 设置为 WEBINAR 类型。// 1. 业务逻辑说明// 通过进房的roomID创建RoomParticipantStore实例val participantStore = RoomParticipantStore.create(roomID = "webinar_123456")// 2. 首次获取观众列表(从头开始)// 支持分页加载,可以通过 cursor 参数实现增量获取val initialCursor: String? = null // null 表示从第一页开始获取participantStore.getAudienceList(cursor = initialCursor, completion = object : ListResultCompletionHandler<RoomUser> {override fun onSuccess(result: List<RoomUser>, cursor: String) {Log.d("Test", "获取观众列表成功,观众数量: ${result.size}")}override fun onFailure(code: Int, desc: String) {Log.e("Test", "获取观众列表失败 [错误码: $code]: $desc")}})}
步骤4:搜索房间内成员
进入房间成功后,可以通过调用
RoomParticipantStore 的 searchUsers 接口搜索房间内的成员。import android.util.Logimport io.trtc.tuikit.atomicxcore.api.ListResultCompletionHandlerimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStoreimport io.trtc.tuikit.atomicxcore.api.room.RoomUserfun searchUsers() {// 前提:需要先完成进房操作。// 1. 业务逻辑说明// 通过进房的roomID创建RoomParticipantStore实例val participantStore = RoomParticipantStore.create(roomID = "webinar_123456")// 2. 通过用户名称为关键字搜索房间内成员val keyword = "userName"participantStore.searchUsers(keyword = keyword, completion = object : ListResultCompletionHandler<RoomUser> {override fun onSuccess(result: List<RoomUser>, cursor: String) {Log.d("Test", "搜索房间成员成功,成员数量: ${result.size}")}override fun onFailure(code: Int, desc: String) {Log.e("Test", "搜索房间成员失败 [错误码: $code]: $desc")}})}
步骤5:将观众提升为嘉宾
作为房主或管理员,调用
RoomParticipantStore 的 promoteAudienceToParticipant 接口可以将房间内的观众提升成为嘉宾。import android.util.Logimport io.trtc.tuikit.atomicxcore.api.CompletionHandlerimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStorefun promoteAudienceToParticipant(userID: String) {// 前提:需要先完成进房操作。// 1. 业务逻辑说明// 通过进房的 roomID 创建 RoomParticipantStore 实例val participantStore = RoomParticipantStore.create(roomID = "webinar_123456")// 2. 调用 RoomParticipantStore 提升观众为嘉宾接口// 注意:只有房主或管理员才有权限执行此操作。participantStore.promoteAudienceToParticipant(userID = userID, completion = object : CompletionHandler {override fun onSuccess() {Log.d("Test", "提升为嘉宾成功")}override fun onFailure(code: Int, desc: String) {Log.e("Test", "提升为嘉宾失败 [错误码: $code]: $desc")}})}
作为房间内成员订阅
RoomParticipantStore 的 RoomParticipantListener 中的 onAudiencePromotedToParticipant 事件,被动接收观众提升为嘉宾的变化通知。import android.util.Logimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantListenerimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStoreimport io.trtc.tuikit.atomicxcore.api.room.RoomUserfun subscribeParticipantEvent() {// 1. 业务逻辑说明// 前提:需要先完成进房操作,通过进房的 roomID 创建 RoomParticipantStore 实例val participantStore = RoomParticipantStore.create(roomID = "webinar_123456")// 2. 订阅事件// 通过添加 RoomParticipantListener 监听事件val listener = object : RoomParticipantListener() {override fun onAudiencePromotedToParticipant(userInfo: RoomUser) {Log.d("Test", "观众被提升为嘉宾,userInfo: $userInfo")}}participantStore.addRoomParticipantListener(listener)// 注意:在不需要监听时,记得移除监听器// participantStore.removeRoomParticipantListener(listener)}
步骤6:将嘉宾降级为观众
作为房主或管理员,调用
RoomParticipantStore 的 demoteParticipantToAudience 接口可以将房间内的嘉宾降级成为观众。import android.util.Logimport io.trtc.tuikit.atomicxcore.api.CompletionHandlerimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStorefun demoteParticipantToAudience(userID: String) {// 前提:需要先完成进房操作。// 1. 业务逻辑说明// 通过进房的 roomID 创建 RoomParticipantStore 实例val participantStore = RoomParticipantStore.create(roomID = "webinar_123456")// 2. 调用 RoomParticipantStore 降级嘉宾为观众接口// 注意:只有房主或管理员才有权限执行此操作。participantStore.demoteParticipantToAudience(userID = userID, completion = object : CompletionHandler {override fun onSuccess() {Log.d("Test", "降级为观众成功")}override fun onFailure(code: Int, desc: String) {Log.e("Test", "降级为观众失败 [错误码: $code]: $desc")}})}
作为房间内成员订阅
RoomParticipantStore 的 RoomParticipantListener 中的 onParticipantDemotedToAudience 事件,被动接收嘉宾降级为观众的变化通知。import android.util.Logimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantListenerimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStoreimport io.trtc.tuikit.atomicxcore.api.room.RoomUserfun subscribeParticipantEvent() {// 1. 业务逻辑说明// 前提:需要先完成进房操作,通过进房的roomID创建RoomParticipantStore实例val participantStore = RoomParticipantStore.create(roomID = "webinar_123456")// 2. 订阅事件// 通过添加 RoomParticipantListener 监听事件val listener = object : RoomParticipantListener() {override fun onParticipantDemotedToAudience(userInfo: RoomUser) {Log.d("Test", "嘉宾被降级为观众,userInfo: $userInfo")}}participantStore.addRoomParticipantListener(listener)// 注意:在不需要监听时,记得移除监听器// participantStore.removeRoomParticipantListener(listener)}
步骤7:设置/撤销管理员
作为房主,调用
RoomParticipantStore 的 setAdmin 接口,指定房间内任意一位用户为管理员,也可以将管理员身份撤销。import android.util.Logimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStoreimport io.trtc.tuikit.atomicxcore.api.CompletionHandler// 业务逻辑说明// 前提:需要先完成进房操作,通过进房的roomID创建RoomParticipantStore实例private val roomID = "webinar_123456"private val participantStore = RoomParticipantStore.create(roomID)// 设置用户为管理员fun setUserAsAdmin(userID: String) {participantStore.setAdmin(userID, object : CompletionHandler {override fun onSuccess() {Log.d("Participant", "成功设置用户 $userID 为管理员")}override fun onFailure(code: Int, desc: String) {Log.e("Participant", "设置管理员失败 [错误码: $code]: $desc")}})}// 撤销用户的管理员权限fun revokeAdmin(userID: String) {participantStore.revokeAdmin(userID, object : CompletionHandler {override fun onSuccess() {Log.d("Participant", "成功撤销用户 $userID 的管理员权限")}override fun onFailure(code: Int, desc: String) {Log.e("Participant", "撤销管理员失败 [错误码: $code]: $desc")}})}
订阅
RoomParticipantStore 的 RoomParticipantListener 中的 onAdminSet 和 onAdminRevoked 事件,被动接收身份变化通知。import android.util.Logimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantListenerimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStoreimport io.trtc.tuikit.atomicxcore.api.room.RoomUser// 业务逻辑说明// 前提:需要先完成进房操作,通过进房的roomID创建RoomParticipantStore实例private val roomID = "webinar_123456"private val participantStore = RoomParticipantStore.create(roomID)// 事件监听器private val participantListener = object : RoomParticipantListener() {override fun onAdminSet(userInfo: RoomUser) {Log.d("Participant", "设置管理员事件通知,userInfo: $userInfo")}override fun onAdminRevoked(userInfo: RoomUser) {Log.d("Participant", "撤销管理员事件通知,userInfo: $userInfo")}}// 订阅相关事件private fun subscribeParticipantEvents() {participantStore.addRoomParticipantListener(participantListener)}
步骤8:将成员移出房间
作为房主和管理员,调用
RoomParticipantStore 的 kickUser 可以将房间内成员移出房间。import android.util.Logimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStoreimport io.trtc.tuikit.atomicxcore.api.CompletionHandler// 业务逻辑说明// 前提:需要先完成进房操作,通过进房的roomID创建RoomParticipantStore实例private val roomID = "webinar_123456"private val participantStore = RoomParticipantStore.create(roomID)fun kickUser(userID: String) {// 1. 业务逻辑说明// kickUser 接口用于将指定用户移出房间// 注意:只有房主或管理员才有权限执行此操作// 被移出的用户将立即离开房间,并收到相应的通知// 2. 调用 RoomParticipantStore 移出用户接口participantStore.kickUser(userID, object : CompletionHandler {override fun onSuccess() {Log.d("Participant", "用户移出成功,被移出用户: $userID")}override fun onFailure(code: Int, desc: String) {Log.e("Participant", "移出用户失败 [错误码: $code]: $desc")}})}
订阅
RoomParticipantStore 的 RoomParticipantListener 中的 onKickedFromRoom 事件,被动接收自己被移出房间通知。import android.util.Logimport io.trtc.tuikit.atomicxcore.api.room.KickedOutOfRoomReasonimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantListenerimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStore// 业务逻辑说明// 前提:需要先完成进房操作,通过进房的roomID创建RoomParticipantStore实例private val roomID = "webinar_123456"private val participantStore = RoomParticipantStore.create(roomID)private val participantListener = object : RoomParticipantListener() {override fun onKickedFromRoom(reason: KickedOutOfRoomReason, message: String) {Log.d("Participant", "已被移出房间,被移出原因:$reason, 额外信息:$message")}}// 订阅相关事件private fun subscribeParticipantEvents() {participantStore.addRoomParticipantListener(participantListener)}
步骤9:关闭嘉宾媒体设备
作为房主和管理员,调用
RoomParticipantStore 的 closeParticipantDevice 可以主动关闭嘉宾的摄像头,麦克风。import android.util.Logimport io.trtc.tuikit.atomicxcore.api.CompletionHandlerimport io.trtc.tuikit.atomicxcore.api.device.DeviceTypeimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStore// 业务逻辑说明// 前提:需要先完成进房操作,通过进房的roomID创建RoomParticipantStore实例private val roomID = "webinar_123456"private val participantStore = RoomParticipantStore.create(roomID)fun closeParticipantDevice(userID: String, device: DeviceType) {// 1. 业务逻辑说明// closeParticipantDevice 接口用于房主或管理员关闭指定嘉宾的某个设备// 被关闭的嘉宾会收到设备被关闭通知// 2. 调用 RoomParticipantStore 关闭嘉宾设备接口participantStore.closeParticipantDevice(userID, device, object : CompletionHandler {override fun onSuccess() {Log.d("Participant", "关闭嘉宾设备成功 - 用户: $userID, 设备: $device")}override fun onFailure(code: Int, desc: String) {Log.e("Participant", "关闭嘉宾设备失败: [错误码: $code]: $desc")}})}
说明:
closeParticipantDevice 仅对嘉宾生效,观众无音视频设备权限,无需执行此操作。订阅
RoomParticipantStore 的 RoomParticipantListener 中的 onParticipantDeviceClosed 事件,被动接收设备被关闭通知,并在 UI 上做出提示。import android.util.Logimport io.trtc.tuikit.atomicxcore.api.device.DeviceTypeimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantListenerimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStoreimport io.trtc.tuikit.atomicxcore.api.room.RoomUser// 业务逻辑说明// 前提:需要先完成进房操作,通过进房的roomID创建RoomParticipantStore实例private val roomID = "webinar_123456"private val participantStore = RoomParticipantStore.create(roomID)// 事件监听器private val participantListener = object : RoomParticipantListener() {override fun onParticipantDeviceClosed(device: DeviceType, operator: RoomUser) {Log.d("Participant", "设备被关闭 - 设备: $device, 操作者: ${operator.userName}")}}// 订阅相关事件private fun subscribeParticipantEvents() {participantStore.addRoomParticipantListener(participantListener)}
步骤10:管理会中聊天权限
作为房主和管理员,调用
RoomParticipantStore 的 disableUserMessage 对指定用户进行单独禁言操作,被禁言的用户将记录在 messageDisabledUserList 中。import android.util.Logimport io.trtc.tuikit.atomicxcore.api.CompletionHandlerimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStore// 业务逻辑说明// 前提:需要先完成进房操作,通过进房的roomID创建RoomParticipantStore实例private val roomID = "webinar_123456"private val participantStore = RoomParticipantStore.create(roomID)fun disableUserMessage(userID: String, disable: Boolean) {// 1. 业务逻辑说明// disableUserMessage 接口用于房主或管理员 禁用/解禁 指定成员聊天// 被 禁用/解禁 的用户会收到聊天被 禁用/解禁 通知// 2. 调用 RoomParticipantStore 禁用/解禁 成员聊天接口participantStore.disableUserMessage(userID, disable,object : CompletionHandler {override fun onSuccess() {val action = if (disable) "禁用" else "启用"Log.d("Participant", "$action 成功 - 用户: $userID")}override fun onFailure(code: Int, desc: String) {Log.e("Participant", "禁止用户聊天失败: [错误码: $code]: $desc")}})}
说明:
messageDisabledUserList 仅在研讨会(Webinar)房间中有效,记录当前被单独禁言的用户列表。订阅
RoomParticipantStore 的 RoomParticipantListener 中的 onUserMessageDisabled 事件,被动接收聊天被 禁止/解禁 通知,并在 UI 上做出提示。import android.util.Logimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantListenerimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStoreimport io.trtc.tuikit.atomicxcore.api.room.RoomUser// 业务逻辑说明// 前提:需要先完成进房操作,通过进房的roomID创建RoomParticipantStore实例private val roomID = "webinar_123456"private val participantStore = RoomParticipantStore.create(roomID)// 事件监听器private val participantListener = object : RoomParticipantListener() {override fun onUserMessageDisabled(disable: Boolean, operator: RoomUser) {val action = if (disable) "禁用" else "启用"Log.d("Participant", "被${action} - 操作者: ${operator.userName}") }}// 订阅相关事件private fun subscribeParticipantEvents() {participantStore.addRoomParticipantListener(participantListener)}
步骤11:全体静音、全体禁画
作为房主和管理员,调用
RoomParticipantStore 的 disableAllDevices 接口设置全员静音,全员禁用摄像头,全员禁用屏幕分享。开启后,房间内嘉宾的音视频开启权限将被限制,无法自主打开麦克风/摄像头/屏幕分享。import android.util.Logimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStoreimport io.trtc.tuikit.atomicxcore.api.device.DeviceTypeimport io.trtc.tuikit.atomicxcore.api.CompletionHandler// 业务逻辑说明// 前提:需要先完成进房操作,通过进房的roomID创建RoomParticipantStore实例private val roomID = "webinar_123456"private val participantStore = RoomParticipantStore.create(roomID)fun disableAllDevices(device: DeviceType, disable: Boolean) {// 1. 业务逻辑说明// disableAllDevices 接口用于房主或管理员设置房间禁用、解禁房间内全体成员麦克风,摄像头, 屏幕分享// 设置后房间内成员会收到禁用、解禁通知// 2. 调用 RoomParticipantStore 禁用、解禁全体设备接口participantStore.disableAllDevices(device, disable, object : CompletionHandler {override fun onSuccess() {val action = if (disable) "禁用" else "启用"Log.d("Participant", "${action}所有${device}成功")}override fun onFailure(code: Int, desc: String) {val action = if (disable) "禁用" else "启用"Log.e("Participant", "${action}所有${device}失败 [错误码: $code]: $desc")}})}
订阅
RoomParticipantStore 的 RoomParticipantListener 中的 onUserMessageDisabled 事件,可以监听自己被禁言的事件。import android.util.Logimport io.trtc.tuikit.atomicxcore.api.device.DeviceTypeimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantListenerimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStoreimport io.trtc.tuikit.atomicxcore.api.room.RoomUser// 业务逻辑说明// 前提:需要先完成进房操作,通过进房的roomID创建RoomParticipantStore实例private val roomID = "webinar_123456"private val participantStore = RoomParticipantStore.create(roomID)// 参与者事件监听器private val participantListener = object : RoomParticipantListener() {override fun onAllDevicesDisabled(device: DeviceType, disable: Boolean, operator: RoomUser) {val action = if (disable) "禁用" else "启用"Log.d("Participant", "所有${device}被${action} - 操作者: ${operator.userName}")}}// 订阅参与者相关事件private fun subscribeParticipantEvents() {participantStore.addRoomParticipantListener(participantListener)}
步骤12:全体禁止聊天
作为房主和管理员,调用
RoomParticipantStore 的 disableAllMessages 接口设置全员禁止聊天。开启后,房间内成员聊天信息将被限制。import android.util.Logimport io.trtc.tuikit.atomicxcore.api.CompletionHandlerimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStore// 业务逻辑说明// 前提:需要先完成进房操作,通过进房的roomID创建RoomParticipantStore实例private val roomID = "webinar_123456"private val participantStore = RoomParticipantStore.create(roomID)fun disableAllMessages(disable: Boolean) {// 1. 业务逻辑说明// disableAllMessages 接口用于房主或管理员设置房间禁用、解禁房间内全体成员聊天// 设置后房间内成员会收到禁用、解禁通知// 2. 调用 RoomParticipantStore 禁用、解禁全体成员聊天participantStore.disableAllMessages(disable, object : CompletionHandler {override fun onSuccess() {val action = if (disable) "禁用" else "启用"Log.d("Participant", "$action 成功")}override fun onFailure(code: Int, desc: String) {val action = if (disable) "禁用" else "启用"Log.e("Participant", "$action 失败 [错误码: $code]: $desc")}})}
订阅
RoomParticipantStore 的 RoomParticipantListener 中的 onAllMessagesDisabled 事件。import android.util.Logimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantListenerimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStoreimport io.trtc.tuikit.atomicxcore.api.room.RoomUser// 业务逻辑说明// 前提:需要先完成进房操作,通过进房的roomID创建RoomParticipantStore实例private val roomID = "webinar_123456"private val participantStore = RoomParticipantStore.create(roomID)// 事件监听器private val participantListener = object : RoomParticipantListener() {override fun onAllMessagesDisabled(disable: Boolean, operator: RoomUser) {val action = if (disable) "禁用" else "启用"Log.d("Participant", "聊天被${action} - 操作者: ${operator.userName}")}}// 订阅相关事件private fun subscribeParticipantEvents() {participantStore.addRoomParticipantListener(participantListener)}
步骤13:监听事件
订阅
RoomParticipantListener 事件。以订阅设备请求为例,示例代码如下:import android.util.Logimport io.trtc.tuikit.atomicxcore.api.room.DeviceRequestInfoimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantListenerimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStore// 业务逻辑说明// 前提:需要先完成进房操作,通过进房的roomID创建RoomParticipantStore实例private val roomID = "webinar_123456"private val participantStore = RoomParticipantStore.create(roomID)// 事件监听器private val participantListener = object : RoomParticipantListener() {override fun onDeviceRequestReceived(request: DeviceRequestInfo) {Log.d("Participant", "设备请求 - 设备类型: ${request.device}, 用户: ${request.senderUserID}")}}// 订阅相关事件private fun subscribeParticipantEvents() {participantStore.addRoomParticipantListener(participantListener)}
订阅
RoomParticipantState 成员相关的属性状态变化。以订阅房间内正在说话的用户为例,示例代码如下:import android.util.Logimport io.trtc.tuikit.atomicxcore.api.room.RoomParticipantStoreimport kotlinx.coroutines.CoroutineScopeimport kotlinx.coroutines.Dispatchersimport kotlinx.coroutines.launch// 业务逻辑说明// 前提:需要先完成进房操作,通过进房的roomID创建RoomParticipantStore实例private val roomID = "webinar_123456"private val participantStore = RoomParticipantStore.create(roomID)/// 设置状态监听private fun subscribeParticipantState() {CoroutineScope(Dispatchers.Main).launch {participantStore.state.speakingUsers.collect { speakingUsers ->Log.d("Participant", "说话用户状态变更 - 当前说话用户数: ${speakingUsers.size}")}}}
API 文档
Store/Component | 功能描述 | API 文档 |
RoomParticipantStore | 房间内成员管理:设置管理员 / 转移房主 / 获取嘉宾列表 / 移出房间 / 嘉宾设备控制(例如关闭、邀请打开麦克风等)。 |
联系我们