概述
RTM 呼叫邀请包括以下场景:
- 主叫发送邀请和取消邀请
- 被叫接收邀请和拒绝邀请
RTM SDK呼叫邀请主要分为四个模块:发送、取消、接收、拒绝呼叫邀请。
RTM SDK是以发信令的形式来实现呼叫邀请的基本逻辑,收到邀请接通后的动作,以及逻辑RTM SDK不做处理,这里需要根据自己的业务逻辑来实现。
适用场景
- app呼叫邀请的响铃功能
- 拨打语音电话呼叫邀请功能
- 需要同步状态的呼叫场景
实现流程
在一个完整的呼叫过程中,主叫和被叫的呼叫邀请状态分别由 LocalInvitation
和 RemoteInvitation
来定义。
发送呼叫邀请
发送呼叫邀请的步骤:
- 获取
RtmCallManager
实例 - 设置
setEventListener
呼叫邀请监听器 - 主叫调用
createLocalInvitation
创建LocalInvitation
,获取LocalInvitation
对象,此时LocalInvitation
对象生命周期开始 - 主叫调用
sendLocalInvitation
发送呼叫邀请。被叫收到onRemoteInvitationReceived
回调,获取RemoteInvitation
对象,此时RemoteInvitation
对象生命周期开始。主叫收到onLocalInvitationReceivedByPeer
回调。
发送呼叫邀请的示例代码如下:
//获取RtmCallManager实例
mRtmCallManager=rtmClient.getRtmCallManager();
void sendLocalInvitation(String peerId) {
//创建 LocalInvitation对象
LocalInvitation mLocalInvitation=mRtmCallManager.createLocalInvitation(peerId);
JSONObject param = new JSONObject();
try {
param.put("xxx",xxx);
} catch (JSONException e) {
e.printStackTrace();
}
//可以设置Json字符串。
mLocalInvitation.setContent(param.toString());
//发送呼叫邀请
mRtmCallManager.sendLocalInvitation(mLocalInvitation);
}
/**
* 返回给被叫:收到一个呼叫邀请。
* @param remote 一个 RemoteInvitation 对象。
*/
@Override
public void onRemoteInvitationReceived(RemoteInvitation remote) {
mRemoteInvitation=remote;
//something
}
/**
* 返回给主叫:被叫已收到呼叫邀请。
* @param local 一个 LocalInvitation 对象。
*/
@Override
public void onLocalInvitationReceivedByPeer(LocalInvitation local) {
//something
}
取消呼叫邀请
主叫调用 cancelLocalInvitation
取消呼叫邀请。被叫收到 onRemoteInvitationCanceled
回调,此时 RemoteInvitation
生命周期结束。主叫收到 onLocalInvitationCanceled
回调,此时LocalInvitation
对象 生命周期结束。
取消呼叫邀请的示例代码如下:
//取消呼叫邀请
void cancelLocalInvitation() {
if (mRtmCallManager != null && mLocalInvitation != null) {
mRtmCallManager.cancelLocalInvitation(mLocalInvitation);
}
}
/**
* 返回给被叫:主叫已取消呼叫邀请。
* @param remote 一个 RemoteInvitation 对象。
*/
@Override
public void onRemoteInvitationCanceled(RemoteInvitation remote) {
//something
}
/**
* 返回给主叫:呼叫邀请已被取消。
* @param local 一个 LocalInvitation 对象。
*/
@Override
public void onLocalInvitationCanceled(LocalInvitation local) {
//something
}
接受呼叫邀请
被叫从 onRemoteInvitationReceived
回调获取 RemoteInvitation
对象并调用 acceptRemoteInvitation
接受呼叫邀请。被叫收到 onRemoteInvitationAccepted
回调,此时 RemoteInvitation
对象生命周期结束。主叫收到 onLocalInvitationAccepted
回调,此时 LocalInvitation
对象生命周期结束。
// 接受呼叫邀请
void acceptRemoteInvitation() {
if (mRtmCallManager != null && mRemoteInvitation != null) {
//mRemoteInvitation对象在onRemoteInvitationReceived回调获取
mRtmCallManager.acceptRemoteInvitation(mRemoteInvitation);
}
}
/**
* 返回给被叫:接受呼叫邀请成功。
* @param remote 一个 RemoteInvitation 对象。
*/
@Override
public void onRemoteInvitationAccepted(RemoteInvitation remote) {
//something
}
/**
* 返回给主叫:被叫已接受呼叫邀请。
* @param local 一个 LocalInvitation 对象。
* @param content LocalInvitation 的响应内容。
*/
@Override
public void onLocalInvitationAccepted(LocalInvitation local, String content) {
//something
}
拒绝呼叫邀请
被叫从 onRemoteInvitationReceived
回调获取 RemoteInvitation
对象 并调用 refuseRemoteInvitation
拒绝呼叫邀请。被叫收到 onRemoteInvitationRefused
回调,此时 RemoteInvitation
对象生命周期结束。主叫收到 onLocalInvitationRefused
回调,此时 LocalInvitation
对象生命周期结束。
// 拒绝呼叫邀请
void refuseRemoteInvitation() {
if (mRtmCallManager != null) {
//mRemoteInvitation对象在onRemoteInvitationReceived回调获取
mRtmCallManager.refuseRemoteInvitation(mRemoteInvitation);
}
}
/**
* 返回给被叫:拒绝呼叫邀请成功。
* @param remote 一个 RemoteInvitation 对象。
*/
@Override
public void onRemoteInvitationRefused(RemoteInvitation remote) {
//something
}
/**
* 返回给主叫:被叫已拒绝呼叫邀请。
* @param local 一个 LocalInvitation 对象。
* @param content LocalInvitation 的响应内容。
*/
@Override
public void onLocalInvitationRefused(LocalInvitation local, String content) {
//something
}
API参考
API 详见呼叫邀请 API 文档呼叫邀请管理。
示例项目
我们在 GitHub 提供一个开源的示例项目 ,你可以前往下载体验并参考源代码。