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清理监听器并清空业务事件订阅,防止内存泄漏或向废弃界面分发回调。
这个页面有帮助吗?