浏览 SDKs · Android
平台
SDKsAndroid商业版

处理通话事件

集中设置 Android SDK 的通话邀请、参与者和媒体流 listener。

复制

在应用的通话状态管理处注册一次 OnSignalingListener。SDK 通过这些回调通知来电、接听、拒绝、取消、超时、挂断以及成员进出房间;应用据此更新通话界面和本地通话状态。

SignalingManager 同时只保留一个监听器,重复设置监听器会替换之前的监听器实例。退出登录或切换账号时,先停止更新旧账号的通话状态,再为新账号设置监听器。

OpenIMClient.getInstance().signalingManager.setSignalingListener(
    new OnSignalingListener() {
        @Override
        public void onReceiveNewInvitation(SignalingInfo info) {
            // info 包含来电邀请信息。
        }

        @Override
        public void onInviteeAccepted(SignalingInfo info) {
            // info 表示通话已接受。
        }

        @Override
        public void onInviteeRejected(SignalingInfo info) {
            // info 表示通话已拒绝。
        }

        @Override
        public void onInvitationCancelled(SignalingInfo info) {
            // info 表示邀请已取消。
        }

        @Override
        public void onInvitationTimeout(SignalingInfo info) {
            // info 表示邀请已超时。
        }

        @Override
        public void onInviteeAcceptedByOtherDevice(SignalingInfo info) {
            // info 表示其他设备已接听。
        }

        @Override
        public void onInviteeRejectedByOtherDevice(SignalingInfo info) {
            // info 表示其他设备已拒绝。
        }

        @Override
        public void onHangup(SignalingInfo info) {
            // info 表示通话已挂断。
        }

        @Override
        public void onRoomParticipantConnected(RoomCallingInfo room) {
            // room 包含加入后的参与者信息。
        }

        @Override
        public void onRoomParticipantDisconnected(RoomCallingInfo room) {
            // room 包含离开后的参与者信息。
        }

        @Override
        public void onStreamChange(String streamInfo) {
            // streamInfo 包含媒体流变化。
        }
    }
);
回调何时触发应用处理建议
onReceiveNewInvitation收到新的通话邀请。保存 SignalingInfo,拉起或显示来电接听界面,并等待用户操作。
onInviteeAccepted、onInviteeRejected某位被邀请者接听或拒绝。更新对应成员的通话状态;在群聊通话中仅更新该成员节点,不影响其他参与者。
onInvitationCancelled、onInvitationTimeout、onHangup邀请被取消、超时或任一方挂断。关闭对应通话界面,断开音视频媒体连接并释放本地音视频设备。
onInviteeAcceptedByOtherDevice、onInviteeRejectedByOtherDevice同一账号的另一台设备已接听或拒绝。结束当前设备上的来电振铃与响应界面,避免多端同时处理冲突。
onRoomParticipantConnected、onRoomParticipantDisconnected成员进入或离开媒体房间。更新群聊通话中的在会成员列表与连线视图。
onStreamChange服务端发送媒体流变化信息。按服务端实际约定解析媒体流描述并动态刷新音视频轨道。

状态合并与生命周期

  • 通话全局标识:使用 roomID(位于 SignalingInfo.invitation.roomID 或 RoomCallingInfo.roomID)唯一定位一次呼叫或通话房间,用于界面路由与生命周期管理。
  • 参与者标识:使用 roomID:userID 组合标识合并各成员的接听、拒接、在会及流状态,避免群聊中多成员状态互相干扰。
  • 注销与清理:SignalingManager 仅保留单个监听器实例。在切换账号或退出登录时,可传入 null 清理监听器并清空业务事件订阅,防止内存泄漏或向废弃界面分发回调。