更新时间:2019-11-20
用户可以将正在进行的音频通话保持,待需要的时候再恢复通话,能减少拨号次数,使用更方便。
音频通话已建立,主被叫正在通话中。
保持通话
通话中,主被叫双方均可以发起保持通话操作。
//Java code public boolean holdCall() { int result = tsdkCall.holdCall(); if (result != 0) { LogUtil.e(TAG, "holdCall return failed, result = " + result); return false; } return true; } |
代码示例:
//Java code public void onEvtHoldFailed(TsdkCall call){ Log.i(TAG, "handleHoldFailed"); CallInfo callInfo = getCallInfo(call); Session callSession = getCallSessionByCallID(callInfo.getCallID()); if (callSession.isVideoHold()) { callSession.setVideoHold(false); //保持失败,只直接通知UI失败,不自动动恢复视频 mCallNotification.onCallEventNotify(CallConstant.CallEvent.VIDEO_HOLD_FAILED, callInfo); } else { mCallNotification.onCallEventNotify(CallConstant.CallEvent.AUDIO_HOLD_FAILED, callInfo); } } |
//Java code public void onEvtHoldSuccess(TsdkCall call){ Log.i(TAG, "handleHoldSuccess"); CallInfo callInfo = getCallInfo(call); Session callSession = getCallSessionByCallID(callInfo.getCallID()); if (callSession.isVideoHold()) { mCallNotification.onCallEventNotify(CallConstant.CallEvent.VIDEO_HOLD_SUCCESS, callInfo); } else { mCallNotification.onCallEventNotify(CallConstant.CallEvent.AUDIO_HOLD_SUCCESS, callInfo); } } |
恢复通话
保持通话发起方才可进行恢复通话操作。
//Java code public boolean unHoldCall() { int result = tsdkCall.unholdCall(); if (result != 0) { LogUtil.e(TAG, "unholdCall return failed, result = " + result); return false; } return true; } |
恢复通话可能由于网络侧极低概率的冲突或异常,导致用户恢复通话失败,此时SDK通过TsdkNotify对象中的onEvtUnholdFailed() 向UI上报取消保持通话失败事件,并自动挂断通话。
代码示例:
//Java code public void onEvtUnholdSuccess(TsdkCall call){ Log.i(TAG, "handleUnholdSuccess"); int callId = call.getCallInfo().getCallId(); Session callSession = getCallSessionByCallID(callId); if (callSession == null) { Log.e(TAG, "call session obj is null"); return; } if (callSession.isVideoHold()) { addVideo(callId); callSession.setVideoHold(false); } CallInfo callInfo = getCallInfo(call); mCallNotification.onCallEventNotify(CallConstant.CallEvent.UN_HOLD_SUCCESS, callInfo); } |
//Java code public void onEvtUnholdFailed(TsdkCall call){ Log.i(TAG, "handleUnholdFailed"); CallInfo callInfo = getCallInfo(call); mCallNotification.onCallEventNotify(CallConstant.CallEvent.UN_HOLD_FAILED, callInfo); } |
因通话双方均可以在本端处于通话态发起保持操作,即通话可能会处于双向保持态,在任一保持方发起恢复通话时,仅能恢复本端通话状态,不会恢复对端的通话状态。