目录

外设VoIP通话控制

场景介绍

从API26.0.1版本开始,新增外设VoIP通话控制。

用户在远端设备(如第三方穿戴设备)上控制本设备的VoIP通话,称为外设VoIP通话控制场景。在该场景中,运行在远端设备上的应用可以接听、拒接当前来电,或者挂断当前通话。由系统选择待控制的VoIP通话,优先选择第一路通话,无需应用指定callId。

当前支持的操作如下:

约束与限制

[h2]使用限制

本端和远端设备需要打开蓝牙或WLAN开关,并确保本端与远端设备已配对并连接成功。

[h2]设备限制

本端设备:支持HarmonyOS 7及以上的Phone、Tablet、PC/2in1、Wearable设备。

接口说明

外设VoIP通话控制场景的接口,由voipCallControl提供。更多接口信息详见接口文档。

接口名 描述
answerCall(videoState?: VideoStateType): Promise<void> 接听当前来电,可通过videoState指定语音接听或视频接听。
rejectCall(): Promise<void> 拒接当前来电。
hangUpCall(): Promise<void> 挂断当前通话。

开发步骤

  1. 在开发前,需要在应用的配置文件中声明权限ohos.permission.MANAGE_CALL_FOR_DEVICES,申请方式请参见声明权限。

  2. 导入相关依赖。

    import { voipCallControl } from '@kit.CallServiceKit';
    import { BusinessError } from '@kit.BasicServicesKit';
    import { hilog } from '@kit.PerformanceAnalysisKit';
    import { observer } from '@kit.TelephonyKit';
  3. 调用observer.onVoIPStateChange,监听voip通话状态。

  4. 接听当前来电。

    语音接听:传入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);
    });
  5. 拒接当前来电。

    示例代码如下:

    // 拒接当前来电
    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);
    });
  6. 挂断当前通话。

    系统会选择待挂断的通话:优先挂断激活态通话,如来电中不存在激活态通话,则挂断来电。

    示例代码如下:

    // 挂断当前通话
    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);
    });