一、CallKit
官网开发文档:https://doc.rongcloud.cn/call/Android/5.X/callkit/integration#callee
如果开发者是以源码的方式集成的 CallKit ,可以通过修改 RongCallProxy.java 的代码,实现自己应用的监听(如 通话结束的回调监听)。修改完下述方法后,在您的应用里调用 setAppCallListener() 设置您自己的监听。
示例如下:
public class RongCallProxy implements IRongCallListener {
private IRongCallListener mCallListener; // 增加一个监听。
/*设置自己应用的监听*/
public void setAppCallListener(IRongCallListener listener) {
this.mAppCallListener = listener;
}
/*修改对应的通话状态回调的方法,使其回调到您设置的应用自身的监听*/
@Override
public void onCallDisconnected(RongCallSession callSession, RongCallCommon.CallDisconnectedReason reason) {
if (mCallListener != null) {
mCallListener.onCallDisconnected(callSession, reason);
}
/*增加的代码,回调应用设置的监听*/
if(mAppCallListener != null) {
mAppCallListener.onCallDisconnected(callSession, reason);
}
}
... // 根据您的需要,同样的方式修改其它通话状态回调函数。
}
二、CallLib
官网开发文档:https://doc.rongcloud.cn/call/Android/5.X/calllib/control/listener
calllib 中的 RongCallClient.getInstance().setVoIPCallListener(new IRongCallListener() {…} 来监听通话结束,且需要您自己来实现通话 UI ( CallKit 的功能 )了。
RongCallClient.getInstance().setVoIPCallListener(new IRongCallListener() {
/**
* 电话已拨出。
* 主叫端拨出电话后,通过回调 onCallOutgoing 通知当前 call 的详细信息。
*
* @param callSession 通话实体。
* @param localVideo 本地 camera 信息。
*/
@Override
public void onCallOutgoing(RongCallSession callSession, SurfaceView localVideo) {}
/**
* 已建立通话。
* 通话接通时,通过回调 onCallConnected 通知当前 call 的详细信息。
*
* @param callSession 通话实体。
* @param localVideo 本地 camera 信息。
*/
@Override
public void onCallConnected(RongCallSession callSession, SurfaceView localVideo) {}
/**
* 通话结束。
* 通话中,对方挂断,己方挂断,或者通话过程网络异常造成的通话中断,都会回调 onCallDisconnected。
*
* @param callSession 通话实体。
* @param reason 通话中断原因。
*/
@Override
public void onCallDisconnected(RongCallSession callSession, RongCallCommon.CallDisconnectedReason reason) {}
/**
* 被叫端正在振铃。
* 主叫端拨出电话,被叫端收到请求,发出振铃响应时,回调 onRemoteUserRinging。
*
* @param userId 振铃端用户 id。
*/
@Override
public void onRemoteUserRinging(String userId) {}
/**
* 被叫端加入通话。
* 主叫端拨出电话,被叫端收到请求后,加入通话,回调 onRemoteUserJoined。
*
* @param userId 加入用户的 id。<br />
* @param mediaType 加入用户的媒体类型,audio or video。<br />
* @param userType 加入用户的类型,1:正常用户,2:观察者。<br />
* @param remoteVideo 加入用户者的 camera 信息。如果 userType为2,remoteVideo对象为空;<br />
* 如果对端调用{@link RongCallClient#startCall(int, boolean, Conversation.ConversationType, String, List, List, RongCallCommon.CallMediaType, String, StartCameraCallback)} 或
* {@link RongCallClient#acceptCall(String, int, boolean, StartCameraCallback)}开始的音视频通话,则可以使用如下设置改变对端视频流的镜像显示:<br />
* <pre class="prettyprint">
* public void onRemoteUserJoined(String userId, RongCallCommon.CallMediaType mediaType, int userType, SurfaceView remoteVideo) {
* if (null != remoteVideo) {
* ((RongRTCVideoView) remoteVideo).setMirror( boolean);//观看对方视频流是否镜像处理
* }
* }
* </pre>
*/
@Override
public void onRemoteUserJoined(String userId, RongCallCommon.CallMediaType mediaType, int userType, SurfaceView remoteVideo) {}
/**
* 通话中的某一个参与者,邀请好友加入通话,发出邀请请求后,回调 onRemoteUserInvited。
* @param userId 被邀请者的ID ,可以通过RongCallClient.getInstance().getCallSession().getObserverUserList().contains(userId) ,查看加入的用户是否在观察者列表中
* @param mediaType
*/
@Override
public void onRemoteUserInvited(String userId, RongCallCommon.CallMediaType mediaType) {}
/**
* 通话中的远端参与者离开。
* 回调 onRemoteUserLeft 通知状态更新。
*
* @param userId 远端参与者的 id。
* @param reason 远端参与者离开原因。
*/
@Override
public void onRemoteUserLeft(String userId, RongCallCommon.CallDisconnectedReason reason) {}
/**
* 当通话中的某一个参与者切换通话类型,例如由 audio 切换至 video,回调 onMediaTypeChanged。
*
* @param userId 切换者的 userId。
* @param mediaType 切换者,切换后的媒体类型。
* @param video 切换者,切换后的 camera 信息,如果由 video 切换至 audio,则为 null。
*/
@Override
public void onMediaTypeChanged(String userId, RongCallCommon.CallMediaType mediaType, SurfaceView video) {}
/**
* 通话过程中,发生异常。
*
* @param errorCode 异常原因。
*/
@Override
public void onError(RongCallCommon.CallErrorCode errorCode) {}
/**
* 远端参与者 camera 状态发生变化时,回调 onRemoteCameraDisabled 通知状态变化。
*
* @param userId 远端参与者 id。
* @param disabled 远端参与者 camera 是否可用。
*/
@Override
public void onRemoteCameraDisabled(String userId, boolean disabled) {}
/**
* 远端参与者 麦克风 状态发生变化时,回调 onRemoteMicrophoneDisabled 通知状态变化。
*
* @param userId 远端参与者 id。
* @param disabled 远端参与者 Microphone 是否可用。
*/
@Override
public void onRemoteMicrophoneDisabled(String userId, boolean disabled) {}
/**
* 接收丢包率信息回调
*
* @param userId 远端用户的ID
* @param lossRate 丟包率:0-100
*/
@Override
public void onNetworkReceiveLost(String userId, int lossRate) {}
/**
* 发送丢包率信息回调
*
* @param lossRate 丢包率,0-100
* @param delay 发送端的网络延迟
*/
@Override
public void onNetworkSendLost(int lossRate, int delay) {}
/**
* 收到某个用户的第一帧视频数据
*
* @param userId
* @param height
* @param width
*/
@Override
public void onFirstRemoteVideoFrame(String userId, int height, int width) {}
/**
* 本端音量大小回调
*
* @param audioLevel
*/
@Override
public void onAudioLevelSend(String audioLevel) {}
/**
* 对端音量大小回调
*
* @param audioLevel key:userId , value:音量等级
*/
@Override
public void onAudioLevelReceive(HashMap<String, String> audioLevel) {}
/**
* 远端用户发布了自定义视频流
* <p>调用RongCallClient.getInstance().publishCustomVideoStream(String tag, publishCallBack callBack) 方法发布自定义视频流</p>
* @param userId 用户 ID
* @param streamId 自定义视频流 id
* @param tag 自定义视频流 tag
* @param surfaceView 自定义视频流视图
*/
@Override
public void onRemoteUserPublishVideoStream(String userId, String streamId, String tag, SurfaceView surfaceView) {}
/**
* 远端用户取消发布自定义视频流
* @param userId 用户 ID
* @param streamId 自定义视频流 id
* @param tag 自定义视频流 tag
*/
@Override
public void onRemoteUserUnpublishVideoStream(String userId, String streamId, String tag) {}
});