# 去电场景

## 场景介绍

应用主动发起音/视频通话，称为去电场景。

去电场景，由于应用在前台，不需要横幅通知，只在屏幕左上角，展示通话胶囊。去电场景的效果图展示如下：

|**语音去电(正在呼叫)**|**语音去电（通话中）**|**视频去电（正在呼叫）**|**视频去电（通话中）**|
|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/a3/v3/J04tccLfSZei8bmcGGmEAA/zh-cn_image_0000002767861346.jpg?HW-CC-KV=V1&HW-CC-Date=20261019T062549Z&HW-CC-Expire=31536000000&HW-CC-Sign=A6039039A23799AD92F56F61A45AB6C6DCA35E224EE3AB8C31CBF927E0529977)|![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/a9/v3/hNzwRhU5QqG1cB3kAM2gsA/zh-cn_image_0000002797181309.jpg?HW-CC-KV=V1&HW-CC-Date=20261019T062549Z&HW-CC-Expire=31536000000&HW-CC-Sign=92A1A79056D7559DBCE0C05A7E1D253A2236B9316E99907218BB671BF0862689)|![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/9f/v3/OhFvCS4FQ7quaR5BdPsLZA/zh-cn_image_0000002768021330.jpg?HW-CC-KV=V1&HW-CC-Date=20261019T062549Z&HW-CC-Expire=31536000000&HW-CC-Sign=B1CAFFC3253C91B53D8AF61D7F64F2D92F7C5CFB3F919BCBC1AF20EE4F3B3919)|![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/a7/v3/fo9cruMKStGu3C4uoDb3zg/zh-cn_image_0000002797301277.jpg?HW-CC-KV=V1&HW-CC-Date=20261019T062549Z&HW-CC-Expire=31536000000&HW-CC-Sign=B0618F59C7664DC4D2AAB22908098953395044A46D12BF163CC66C7ABCA8094C)|

去电场景，用户也可以拉起通知中心面板，在实况窗横幅上做静音与解除静音、挂断通话等操作。

|**去电实况窗通知（正在呼叫）**|**去电实况窗通知（通话中）**|
|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/e8/v3/MaibonfkTG6PZZkEPOSY6A/zh-cn_image_0000002767861348.jpg?HW-CC-KV=V1&HW-CC-Date=20261019T062549Z&HW-CC-Expire=31536000000&HW-CC-Sign=3C7124AE622ABF6C70D9122FADA84F48D345F68FDF63BCCC9E6339E434AB3B19)|![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/d6/v3/paD_-gLbRrO7Wstx0dUG5A/zh-cn_image_0000002797181311.jpg?HW-CC-KV=V1&HW-CC-Date=20261019T062549Z&HW-CC-Expire=31536000000&HW-CC-Sign=EE2CE2C915939ADC56149DD9735834C728C4F96600D587044DD5EAEBBE81BE3D)|

## 约束与限制

去电场景支持Phone、Tablet设备，并从6.0.0(20)版本开始支持Wearable设备，6.1.1(24)版本开始支持PC/2in1设备。

## 业务流程

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/ea/v3/JdPBLghcSW-PI-8_5uaP0w/zh-cn_image_0000002768021332.jpg?HW-CC-KV=V1&HW-CC-Date=20261019T062549Z&HW-CC-Expire=31536000000&HW-CC-Sign=A224296B088ADE4439E70E3DF8EA93C2AD114294DBE8978B6F93B9045AB45C15)

## 接口说明

去电场景的接口，由[voipCall](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/call-voipcall)提供。更多接口信息详见[接口文档](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/call-voipcall)。

|接口名|描述|
|:-----------------------------------------------------------------------------------------------------|:---------------------|
|on(type: 'voipCallUiEvent', callback: Callback<VoipCallUiEventInfo>): void|订阅voipCallUiEvent事件。|
|off(type: 'voipCallUiEvent', callback?: Callback<VoipCallUiEventInfo>): void|取消订阅voipCallUiEvent事件。|
|reportOutgoingCall(voipCallAttribute: VoipCallAttribute): Promise<ErrorReason>|上报去电。|
|reportCallAudioEventChange(callId: string, callAudioEvent: CallAudioEvent): Promise<void>|上报音频事件。|
|reportCallStateChange(callId: string, callState: VoipCallState): Promise<void>|上报通话状态改变。|
|reportCallStateChange(callId: string, callState: VoipCallState, callType: VoipCallType): Promise<void>|上报通话状态改变，并指定通话类型。|

## 开发步骤

去电场景的开发步骤与来电场景相似。

1. 导入相关依赖。

   ```typescript
   import { voipCall } from '@kit.CallServiceKit';
   import { image } from '@kit.ImageKit';
   import { hilog } from '@kit.PerformanceAnalysisKit';
   ```

2. 为了感知到用户在实况窗上做的静音与解除静音、挂断通话等操作，应用需要注册voipCallUiEvent事件。建议在上报去电之前注册。

   示例代码如下：

   ```typescript
   // 注册voipCallUiEvent事件
   voipCall.on('voipCallUiEvent', callback => {
     hilog.info(0x0000, 'CallDemo', 'Succeeded in registering voipCallUiEvent');
   });
   ```

3. 应用内部建立通话连接之后，需要向Call Service Kit上报去电，并携带通话信息，详见[VoipCallAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/call-voipcall#voipcallattribute)。

   系统会在屏幕左上角，展示通话胶囊。

   以语音去电为例，示例代码如下：

   ```typescript
   // 构建上报去电的参数
   let voipCallAttribute: voipCall.VoipCallAttribute = {
     callId: 'callId123',
     voipCallType: voipCall.VoipCallType.VOIP_CALL_VOICE,
     userName: 'Jack',
     userProfile: image.createPixelMapSync(new ArrayBuffer(100), { size: { width: 90, height: 90 } }),
     abilityName: 'VoipCallAbility',
     voipCallState: voipCall.VoipCallState.VOIP_CALL_STATE_DIALING,  // 去电的状态必须是DIALING
     showBannerForIncomingCall: true
   };

   // 向Call Service Kit上报去电
   voipCall.reportOutgoingCall(voipCallAttribute).then(errorReason => {
     if (errorReason == voipCall.ErrorReason.ERROR_NONE) {
       hilog.info(0x0000, 'CallDemo', 'Succeeded in reporting the outgoing call');
     } else {
       hilog.error(0x0000, 'CallDemo', 'Failed to report the outgoing call: %{public}d', errorReason);
     }
   });
   ```

   > 注意
   >
   > 上报去电时，通话状态必须是VOIP_CALL_STATE_DIALING，否则Call Service Kit会认为参数不合法而返回[1007200001错误码](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/call-error-code#section1007200001-参数无效)。
4. 如果对端接听，应用需要向Call Service Kit上报通话状态[VOIP_CALL_STATE_ACTIVE](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/call-voipcall#voipcallstate)。系统会更新通话胶囊，开始展示通话计时。

   示例代码如下：

   ```typescript
   // ...应用服务器收到对端接听的消息
   let answeredCallId = '123456'; // 与reportOutgoingCall携带callId一致，应用内通话唯一ID。

   // 向Call Service Kit上报通话状态
   voipCall.reportCallStateChange(answeredCallId, voipCall.VoipCallState.VOIP_CALL_STATE_ACTIVE);
   ```

5. 去电场景，用户也可以拉起通知中心面板，在实况窗通知上执行静音或解除静音。

   开发方法与来电场景相同，详见[来电场景：静音与解除静音](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/incoming-calls#开发步骤)。
6. 去电场景，用户也可以拉起通知中心面板，在实况窗通知上点击挂断。

   开发方式与来电场景相同，详见[来电场景：用户点击挂断](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/incoming-calls#开发步骤)。
7. 通话结束后，可以解除voipCallUiEvent事件。

   示例代码如下：

   ```typescript
   // 解除voipCallUiEvent事件
   voipCall.off('voipCallUiEvent', callback => {
     hilog.info(0x0000, 'CallDemo', `Succeeded in unRegistering voipCallUiEvent, callId: ${callback.callId}`);
   });
   ```

