从API26.0.1版本开始,新增外设VoIP通话控制。
用户在远端设备(如第三方穿戴设备)上控制本设备的VoIP通话,称为外设VoIP通话控制场景。在该场景中,运行在远端设备上的应用可以接听、拒接当前来电,或者挂断当前通话。由系统选择待控制的VoIP通话,优先选择第一路通话,无需应用指定callId。
当前支持的操作如下:
需要申请权限ohos.permission.MANAGE_CALL_FOR_DEVICES,申请方式请参见声明权限。
本设备上需存在可控制的VoIP通话(来电或通话中),否则调用会返回1007200004错误码。
外设VoIP通话控制场景的接口,由voipCallControl提供。更多接口信息详见接口文档。
| 接口名 | 描述 |
|---|---|
| answerCall(videoState?: VideoStateType): Promise<void> | 接听当前来电,可通过videoState指定语音接听或视频接听。 |
| rejectCall(): Promise<void> | 拒接当前来电。 |
| hangUpCall(): Promise<void> | 挂断当前通话。 |
在开发前,需要在应用的配置文件中声明权限ohos.permission.MANAGE_CALL_FOR_DEVICES,申请方式请参见声明权限。
导入相关依赖。
import { voipCallControl } from '@kit.CallServiceKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { observer } from '@kit.TelephonyKit'; 调用observer.onVoIPStateChange,监听voip通话状态。
接听当前来电。
语音接听:传入TYPE_VOICE。
示例代码如下:
// 语音接听当前来电
voipCallControl.answerCall().then(() => {
hilog.info(0x0000, 'CallDemo', 'Succeeded in answering the voice call.');
}).catch((err: BusinessError) => {
hilog.error(0x0000, 'CallDemo', 'Failed to answer the voice call: %{public}d %{public}s', err.code, err.message);
}); 视频接听:传入TYPE_VIDEO。
示例代码如下:
// 视频接听当前来电
voipCallControl.answerCall(voipCallControl.VideoStateType.TYPE_VIDEO).then(() => {
hilog.info(0x0000, 'CallDemo', 'Succeeded in answering the video call.');
}).catch((err: BusinessError) => {
hilog.error(0x0000, 'CallDemo', 'Failed to answer the video call: %{public}d %{public}s', err.code, err.message);
}); 拒接当前来电。
示例代码如下:
// 拒接当前来电
voipCallControl.rejectCall().then(() => {
hilog.info(0x0000, 'CallDemo', 'Succeeded in rejecting the call.');
}).catch((err: BusinessError) => {
hilog.error(0x0000, 'CallDemo', 'Failed to reject the call: %{public}d %{public}s', err.code, err.message);
}); 挂断当前通话。
系统会选择待挂断的通话:优先挂断激活态通话,如来电中不存在激活态通话,则挂断来电。
示例代码如下:
// 挂断当前通话
voipCallControl.hangUpCall().then(() => {
hilog.info(0x0000, 'CallDemo', 'Succeeded in hanging up the call.');
}).catch((err: BusinessError) => {
hilog.error(0x0000, 'CallDemo', 'Failed to hang up the call: %{public}d %{public}s', err.code, err.message);
});