本文为您介绍了在Android开发时,SDK的使用说明及示例。
创建实例
//context建议传入Application,设置成单例对象
AlicomRTC alicomRTC = new AlicomRTC(context);
说明 AlicomRTC实例一旦需要重新创建新的实例请先destroy旧的实例再创建新的防止出现业务混乱。
参数描述:
参数 | 类型 | 说明 |
context | Context | 传ApplicationContext对象 |
设置参数与回调(可选)
//添加一个监听服务状态的回调
alicomRTC.addListener(new ServiceListener() {
//服务连接成功,当前处于可用状态
@Override
public void onServiceAvailable() {}
//服务连接失败、或者连接断开了,正在销毁资源,当前处于不可操作
@Override
public void onServiceUnavailable(int errCode, String errMsg) {}
//服务已销毁完成,当前处于未连接状态
@Override
public void onServiceIdle(){}
//收到点对点音频来电
@Override
public void onReceivingAudioCall(Call call){}
});
//可选,设置默认的呼叫超时时间
alicomRTC.setDefaultCallTimeout(60);
参数描述:
参数 | 类型 | 说明 |
serviceListener | ServiceListener | 传监听服务状态的回调。 |
连接服务
/*
*连接服务,有账号模式需调用initWithRtcId传入融合通信账号,
*无账号模式则调用initWithCustomId传入自定义账号,
*以及TokenUpdater的实现用于获取token
*(Token的具体获取过程由接入方自己实现,
*由接入方app从接入方服务端获取,
*而服务端通过pop服务从云通信获取)。
*SDK每过一段时间就会请求新的token,
*接入方需要实现方法实时获取id对应最新token。
*连接成功时会在第2步添加的ServiceListener中回调。
*/
TokenUpdater tokenUpdater = new TokenUpdater() {
@Override
public void updateToken (TokenHandler tokenHandler){
//get latest token string from network, then
tokenHandler.setToken(Token.fromJsonString(latestTokenString));
}
};
//调用此方法进行初始化连接
alicomRTC.initWithRtcId(RtcId, tokenUpdater);
参数描述:
参数 | 类型 | 说明 |
rtcId | String | 调用AddRtcAccount接口创建获取rtcId。 |
tokenUpdater | TokenUpdater | 更新token回调,获取tokenHandler 来更新token,用Token.fromJsonString 函数来将字符串格式的token转成Token对象。
|
注意 tokenUpdater回调函数的实现,更新的token设置一定要保证是token最新的有效token,尽量避免获取token超时的情况。
开始通话
当
ServiceListener
中的onServiceAvailable
回调被唤起时,表示服务已经连接成功,此时可以开始发起各类通话。
- 发起voip2pstn呼叫
- 自有线路
//customLineName为自有线路名称,targetShowNumber为被叫方显示的来电号码,需要从云通信购买可用号码 alicomRTC.builder().pstnCall(customLineName,targetShowNumber, targetPhoneNumber).listener(listener).build().start();
参数描述:参数 类型 说明 customLineName String 自有线路名称。 targetShowNumber String 被叫号显,被叫方显示的来电号码。 targetPhoneNumber String 被叫电话号码。 - 非自有线路
//targetShowNumber为被叫方显示的来电号码,需要从云通信购买可用号码 alicomRTC.builder().pstnCall(customLineName,targetShowNumber, targetPhoneNumber).listener(listener).build().start();
参数描述:参数 类型 说明 targetShowNumber String 被叫号显,被叫方显示的来电号码。 targetPhoneNumber String 被叫电话号码。
- 自有线路
- 接听电话
1.//在ServiceListener中 public void onReceivingAudioCall(Call call) { call.start(); }
- 挂断/拒绝电话
call.stop();
- 销毁服务
alicomRTC.destroy();
- 本地静音,使自己静音,使对方无法听到自己的声音,别人不会知道,与Participant中的mute属性无关
call.muteLocalAudiocall();
- 使自己取消本地静音状态
call.unmuteLocalAudio();
- 打开或关闭扬声器
call.speakerOn(boolean on);
参数描述参数 类型 说明 on boolean true表示打开扬声器,false表示关闭扬声器。 - 开启pstn电话服务端录音
pstnCallBuilder.serverRecordEnabled(true)
参数描述参数 类型 说明 on boolean true表示开启服务端录音,false表示不开启服务端录音。 - 判断当前是否是本地静音状态
call.isLocalAudioMuted()
- 获取当前通话设置中扬声器是否打开
call.isSpeakerOn()
- 设置通话CallListener监听
call.setCallListener(new AbstractAutoAnswerServiceListener() { //需要自动接听的号码列表 @Override public List<String> getAutoAnswerCallerNumbers() { return numbers; } //接收到正常电话(非自动接听号码列表的电话) @Override public void onReceivingCall(Call call) { } //自动接听的电话 @Override public void onAutoAnswered(Call call) { } //服务连接成功,当前处于可用状态 @Override public void onServiceAvailable() { } //服务连接失败、或者连接断开了,正在销毁资源,当前处于不可操作 @Override public void onServiceUnavailable(int errCode, String errMsg) { } //服务已销毁完成,当前处于未连接状态 @Override public void onServiceIdle() { } };
注意 安卓9.0系统对App退后台的麦克风做了限制,为防止通话的时候程序退后台引起的通话被静音问题,请在App退后台情况下发送前台通知来防止通话被静音。
API概述
入口
- 类AlicomRTC为API入口,包含初始化服务、添加生命周期回调、销毁服务、设置全局默认属性、构建通话入口以及一些全局公共方法。
- 类TokenUpdater是接入方需要实现的获取最新token的方法,sdk在需要时会唤起该回调获取最新token,接入方在获取到最新token串后可以调用Token.fromJsonString()方法快捷的获取实例并调用TokenHandler.setToken()方法设置token。
- 调用AlicomRTC.builder方法可以获得构建器用于创建各类通话,并可以设置部分参数。
- 通信
融合通信服务SDK将不同通话功能与类型分拆到了相应的类。比如VideoCall就表示视频点对点通话,包含了视频点对点通话中所有的操作方法,每一个该类的实例表示具体的一次通话,不可重复使用。而基类Talk与VideoTalk分别定义了音频与视频通话的公共方法,没有对应的具体实现
- 监听
- 接口TalkListener中定义了所有公共回调,具体类型的监听回调接口都继承与该接口。
- 每一个具体的通话类型都对应一个事件监听回调,接入方可以在构建通话时设置监听,也可以调用相应set方法设置监听。
其他API,请参见API Reference。
错误码
错误码 | 含义 |
1000100 | MQTT网络连接失败 |
1000101 | 消息发送失败 |
1000102/1000103/1000104 | TOKEN无效/TOKEN获取失败/TOKEN上传失败(统归TOKEN更新失败) |
1000105 | MQTT连接断开 |
1000106 | MQTT订阅topic失败 |
2000000 | 本地主动挂断 |
2000050 | 当前版本不支持视频 |
2000099 | 对端主动挂断 |
2000100 | 本端主叫时,不要拨打自己 |
2000101 | 本端主叫时,拨打的号码为空 |
2000102 | 连接媒体服务器超时 |
2000103 | 本端被叫时,本地超时未响应,于是本地主动拒绝 |
2000104 | 本端主叫时,被叫不在线 |
2000105 | 本端被叫时,接听发生错误 |
2000106 | 本端主叫时,被叫拒绝 |
2000107 | 本端被叫时,主叫取消 |
2000108 | 本端主叫时,被叫无响应 |
2000109 | 本端主叫时,被叫正在通话中 |
2000110 | 本端主叫时,被叫版本过低 |
2000111/2000112 | roomId为空/被踢下线(多方通话的错误码) |
2000113 | 当前服务处于不可用状态 |
2000116 | 本地主动销毁服务,以及导致的正在进行的通话中断 |
2000117 | 状态不对,当前有别的通话正在进行中,无法进行新的通话 |
2000118 | 被叫太多 |
2000120 | 自定义消息为空或长度超过1024 |
2000121 | 网络异常 |
2000122 | 对方接收自定义消息失败 |
2000130 | 没有录音权限 |
2000131 | 没有相机权限 |
2000132 | 主叫呼叫多个被叫时,对于被叫,该通呼叫已被其他设备接听 |
2000133 | 主叫呼叫多个被叫时,对于被叫,该通呼叫已被其他设备拒绝 |
2000134 | 本地主动销毁服务 |
2000135 | 没有麦克风设备 |
2000136 | 浏览器不允许使用麦克风 |
2000137 | 系统禁用麦克风或者麦克风被占用 |
3110000 | 当前账号在别处登录,被踢了,以及导致正在进行的通话中断 |
3110001 | 服务异常 |
3999999 | 服务器系统异常 |
3100000 | 被叫未注册/未登录 |
3100001 | 主叫通话异常 |
3100002 | 参数不正确 |
3100003 | TOKEN验证失败 |
3100004 | 账号错误 |
3100005 | 业务停机 |
3100006 | 无效号显 |
3100007 | 无权操作 |
3100009 | 未订购对应产品 |
3100018/3100019 | 多方通话的错误码 |
3100020 | 被叫不合法 |
3100021 | 被叫连接媒体失败 |
3000000-3300000间别的错误码 | 服务端其他错误 |
3900000-4200000 | 媒体连接失败 |
8000000 | 未知错误 |
常见问题
- 事件回调会在什么线程回调呢?
SDK中所有的Listener回调都会在主线程回调到接入方。
- 每次SDK回调需要更新Token时都要向服务端获取最新的Token吗?
需要获取最新的Token。
- 可以实例化多个AlicomRTC吗?
建议您将AlicomRTC作为单例使用,否则多个实例间会造成Token互斥以及底层资源冲突。