1# 拨打电话 2 3该模块提供呼叫管理功能,包括拨打电话、跳转到拨号界面、获取通话状态、格式化电话号码等。 4 5如需订阅通话状态请使用[`observer.on('callStateChange')`](js-apis-observer.md#observeroncallstatechange)。 6 7>**说明:** 8> 9>本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 10 11## 导入模块 12 13```js 14import call from '@ohos.telephony.call'; 15``` 16 17## call.dial 18 19dial\(phoneNumber: string, callback: AsyncCallback<boolean\>\): void 20 21拨打电话。使用callback异步回调。 22 23**需要权限**:ohos.permission.PLACE\_CALL,该权限为系统权限 24 25**系统能力**:SystemCapability.Telephony.CallManager 26 27**参数:** 28 29| 参数名 | 类型 | 必填 | 说明 | 30| ----------- | ---------------------------- | ---- | --------------------------------------- | 31| phoneNumber | string | 是 | 电话号码。 | 32| callback | AsyncCallback<boolean> | 是 | 回调函数,返回true为成功,false为失败。 | 33 34**示例:** 35 36```js 37call.dial("138xxxxxxxx", (err, data) => { 38 console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); 39}); 40``` 41 42 43## call.dial 44 45dial\(phoneNumber: string, options: DialOptions, callback: AsyncCallback<boolean\>\): void 46 47拨打电话,可设置通话参数。使用callback异步回调。 48 49**需要权限**:ohos.permission.PLACE\_CALL,该权限为系统权限 50 51**系统能力**:SystemCapability.Telephony.CallManager 52 53**参数:** 54 55| 参数名 | 类型 | 必填 | 说明 | 56| ----------- | ---------------------------- | ---- | --------------------------------------- | 57| phoneNumber | string | 是 | 电话号码。 | 58| options | [DialOptions](#dialoptions) | 是 | 通话参数,选择为语音通话还是视频通话。 | 59| callback | AsyncCallback<boolean> | 是 | 回调函数,返回true为成功,false为失败。 | 60 61**示例:** 62 63```js 64call.dial("138xxxxxxxx", { 65 extras: false 66}, (err, data) => { 67 console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); 68}); 69``` 70 71 72## call.dial 73 74dial\(phoneNumber: string, options?: DialOptions\): Promise<boolean\> 75 76拨打电话,可设置通话参数。使用Promise异步回调。 77 78**需要权限**:ohos.permission.PLACE\_CALL,该权限为系统权限 79 80**系统能力**:SystemCapability.Telephony.CallManager 81 82**参数:** 83 84| 参数名 | 类型 | 必填 | 说明 | 85| ----------- | --------------------------- | ---- | -------------------------------------- | 86| phoneNumber | string | 是 | 电话号码。 | 87| options | [DialOptions](#dialoptions) | 是 | 通话参数,选择为语音通话还是视频通话。 | 88 89**返回值:** 90 91| 类型 | 说明 | 92| ---------------------- | ------------------------------------------------------------ | 93| Promise<boolean> | 以Promise形式返回拨打电话的结果,返回true为成功,false为失败。 | 94 95**示例:** 96 97```js 98let promise = call.dial("138xxxxxxxx", { 99 extras: false 100}); 101promise.then(data => { 102 console.log(`dial success, promise: data->${JSON.stringify(data)}`); 103}).catch(err => { 104 console.error(`dial fail, promise: err->${JSON.stringify(err)}`); 105}); 106``` 107 108## call.makeCall<sup>7+</sup> 109 110makeCall(phoneNumber: string, callback: AsyncCallback\<void\>): void 111 112跳转到拨号界面,并显示待拨出的号码。使用callback异步回调。 113 114**系统能力**:SystemCapability.Applications.Contacts 115 116**参数:** 117 118| 参数名 | 类型 | 必填 | 说明 | 119| ----------- | ------------------------- | ---- | ------------------------------------------ | 120| phoneNumber | string | 是 | 电话号码。 | 121| callback | AsyncCallback<void> | 是 | 以callback形式异步返回跳转拨号界面的结果。 | 122 123**示例:** 124 125```js 126call.makeCall("138xxxxxxxx", err => { 127 console.log(`makeCall callback: err->${JSON.stringify(err)}`); 128}); 129``` 130 131 132## call.makeCall<sup>7+</sup> 133 134makeCall(phoneNumber: string): Promise\<void\> 135 136跳转到拨号界面,并显示待拨出的号码。使用Promise异步回调。 137 138**系统能力**:SystemCapability.Applications.Contacts 139 140**参数:** 141 142| 参数名 | 类型 | 必填 | 说明 | 143| ----------- | ------ | ---- | ---------- | 144| phoneNumber | string | 是 | 电话号码。 | 145 146**返回值:** 147 148| 类型 | 说明 | 149| ------------------- | --------------------------------- | 150| Promise<void> | 以Promise形式异步返回拨号的结果。 | 151 152**示例:** 153 154```js 155let promise = call.makeCall("138xxxxxxxx"); 156promise.then(() => { 157 console.log(`makeCall success`); 158}).catch(err => { 159 console.error(`makeCall fail, promise: err->${JSON.stringify(err)}`); 160}); 161``` 162 163## call.hasCall 164 165hasCall\(callback: AsyncCallback<boolean\>\): void 166 167判断是否存在通话。使用callback异步回调。 168 169**系统能力**:SystemCapability.Telephony.CallManager 170 171**参数:** 172 173| 参数名 | 类型 | 必填 | 说明 | 174| -------- | ---------------------------- | ---- | ------------------------------------------------------------ | 175| callback | AsyncCallback<boolean> | 是 | 回调函数。返回true表示当前存在通话,false表示当前不存在通话。 | 176 177**示例:** 178 179```js 180call.hasCall((err, data) => { 181 console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); 182}); 183``` 184 185 186## call.hasCall 187 188hasCall\(\): Promise<boolean\> 189 190判断是否存在通话。使用Promise异步回调。 191 192**系统能力**:SystemCapability.Telephony.CallManager 193 194**返回值:** 195 196| 类型 | 说明 | 197| ---------------------- | --------------------------------------- | 198| Promise<boolean> | 以Promise形式异步返回判断是否存在通话。 | 199 200**示例:** 201 202```js 203let promise = call.hasCall(); 204promise.then(data => { 205 console.log(`hasCall success, promise: data->${JSON.stringify(data)}`); 206}).catch(err => { 207 console.error(`hasCall fail, promise: err->${JSON.stringify(err)}`); 208}); 209``` 210 211 212## call.getCallState 213 214getCallState\(callback: AsyncCallback<CallState\>\): void 215 216获取当前通话状态。使用callback异步回调。 217 218**系统能力**:SystemCapability.Telephony.CallManager 219 220**参数:** 221 222| 参数名 | 类型 | 必填 | 说明 | 223| -------- | -------------------------------------------- | ---- | ------------------------------------ | 224| callback | AsyncCallback<[CallState](#callstate)> | 是 | 回调函数,异步返回获取到的通话状态。 | 225 226**示例:** 227 228```js 229call.getCallState((err, data) => { 230 console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); 231}); 232``` 233 234 235## call.getCallState 236 237getCallState\(\): Promise<CallState\> 238 239获取当前通话状态。使用Promise异步回调。 240 241**系统能力**:SystemCapability.Telephony.CallManager 242 243**返回值:** 244 245| 类型 | 说明 | 246| -------------------------------------- | --------------------------------------- | 247| Promise<[CallState](#callstate)> | 以Promise形式异步返回获取到的通话状态。 | 248 249**示例:** 250 251```js 252let promise = call.getCallState(); 253promise.then(data => { 254 console.log(`getCallState success, promise: data->${JSON.stringify(data)}`); 255}).catch(err => { 256 console.error(`getCallState fail, promise: err->${JSON.stringify(err)}`); 257}); 258``` 259 260## call.hasVoiceCapability<sup>7+</sup> 261 262hasVoiceCapability(): boolean 263 264检查当前设备是否具备语音通话能力。 265 266**系统能力**:SystemCapability.Telephony.CallManager 267 268**返回值:** 269 270| 类型 | 说明 | 271| ------- | ------------------------------------------------------------ | 272| boolean | 返回true表示设备具备语音通话能力,返回false表示设备不具备语音通话能力。 | 273 274```js 275let result = call.hasVoiceCapability(); 276console.log(`hasVoiceCapability: ${JSON.stringify(result)}`); 277``` 278 279## call.isEmergencyPhoneNumber<sup>7+</sup> 280 281isEmergencyPhoneNumber\(phoneNumber: string, callback: AsyncCallback<boolean\>\): void 282 283判断是否是紧急电话号码。使用callback异步回调。 284 285**系统能力**:SystemCapability.Telephony.CallManager 286 287**参数:** 288 289| 参数名 | 类型 | 必填 | 说明 | 290| ----------- | ---------------------------- | ---- | ------------------------------------------------------------ | 291| phoneNumber | string | 是 | 电话号码。 | 292| callback | AsyncCallback<boolean> | 是 | 回调函数。返回true表示是紧急电话号码,返回false表示不是紧急电话号码。 | 293 294**示例:** 295 296```js 297call.isEmergencyPhoneNumber("138xxxxxxxx", (err, data) => { 298 console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); 299}); 300``` 301 302 303## call.isEmergencyPhoneNumber<sup>7+</sup> 304 305isEmergencyPhoneNumber\(phoneNumber: string, options: EmergencyNumberOptions, callback: AsyncCallback<boolean\>\): void 306 307根据电话号码参数,判断是否是紧急电话号码。使用callback异步回调。 308 309**系统能力**:SystemCapability.Telephony.CallManager 310 311**参数:** 312 313| 参数名 | 类型 | 必填 | 说明 | 314| ----------- | -------------------------------------------------- | ---- | ------------------------------------------------------------ | 315| phoneNumber | string | 是 | 电话号码。 | 316| options | [EmergencyNumberOptions](#emergencynumberoptions7) | 是 | 电话号码参数。 | 317| callback | AsyncCallback<boolean> | 是 | 回调函数。返回true表示是紧急电话号码,返回false表示不是紧急电话号码。 | 318 319**示例:** 320 321```js 322call.isEmergencyPhoneNumber("112", {slotId: 1}, (err, value) => { 323 console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); 324}); 325``` 326 327 328## call.isEmergencyPhoneNumber<sup>7+</sup> 329 330isEmergencyPhoneNumber\(phoneNumber: string, options?: EmergencyNumberOptions\): Promise<boolean\> 331 332根据电话号码参数,判断是否是紧急电话号码。使用Promise异步回调。 333 334**系统能力**:SystemCapability.Telephony.CallManager 335 336**参数:** 337 338| 参数名 | 类型 | 必填 | 说明 | 339| ----------- | -------------------------------------------------- | ---- | -------------- | 340| phoneNumber | string | 是 | 电话号码。 | 341| options | [EmergencyNumberOptions](#emergencynumberoptions7) | 是 | 电话号码参数。 | 342 343**返回值:** 344 345| 类型 | 说明 | 346| ---------------------- | --------------------------------------------------- | 347| Promise<boolean> | 以Promise形式异步返回判断是否是紧急电话号码的结果。 | 348 349**示例:** 350 351```js 352let promise = call.isEmergencyPhoneNumber("138xxxxxxxx", {slotId: 1}); 353promise.then(data => { 354 console.log(`isEmergencyPhoneNumber success, promise: data->${JSON.stringify(data)}`); 355}).catch(err => { 356 console.error(`isEmergencyPhoneNumber fail, promise: err->${JSON.stringify(err)}`); 357}); 358``` 359 360## call.formatPhoneNumber<sup>7+</sup> 361 362formatPhoneNumber\(phoneNumber: string, callback: AsyncCallback<string\>\): void 363 364格式化电话号码。使用callback异步回调。 365 366电话号码格式化后为标准数字字串,例如:“138 xxxx xxxx”、“0755 xxxx xxxx”。 367 368**系统能力**:SystemCapability.Telephony.CallManager 369 370**参数:** 371 372| 参数名 | 类型 | 必填 | 说明 | 373| ----------- | --------------------------- | ---- | ------------------------------------ | 374| phoneNumber | string | 是 | 电话号码。 | 375| callback | AsyncCallback<string> | 是 | 回调函数,返回格式化电话号码的结果。 | 376 377**示例:** 378 379```js 380call.formatPhoneNumber("138xxxxxxxx", (err, data) => { 381 console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); 382}); 383``` 384 385## call.formatPhoneNumber<sup>7+</sup> 386 387formatPhoneNumber\(phoneNumber: string, options: NumberFormatOptions, callback: AsyncCallback<string\>\): void 388 389格式化电话号码,可设置格式化参数。使用callback异步回调。 390 391电话号码格式化后为标准数字字串,例如:“138 xxxx xxxx”、“0755 xxxx xxxx”。 392 393**系统能力**:SystemCapability.Telephony.CallManager 394 395**参数:** 396 397| 参数名 | 类型 | 必填 | 说明 | 398| ----------- | -------------------------------------------- | ---- | ------------------------------------ | 399| phoneNumber | string | 是 | 电话号码。 | 400| options | [NumberFormatOptions](#numberformatoptions7) | 是 | 格式化参数,如国家码。 | 401| callback | AsyncCallback<string> | 是 | 回调函数,返回格式化电话号码的结果。 | 402 403**示例:** 404 405```js 406call.formatPhoneNumber("138xxxxxxxx",{ 407 countryCode: "CN" 408}, (err, data) => { 409 console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); 410}); 411``` 412 413 414## call.formatPhoneNumber<sup>7+</sup> 415 416formatPhoneNumber\(phoneNumber: string, options?: NumberFormatOptions\): Promise<string\> 417 418格式化电话号码,可设置格式化参数。使用Promise异步回调。 419 420电话号码格式化后为标准数字字串,例如:“138 xxxx xxxx”、“0755 xxxx xxxx”。 421 422**系统能力**:SystemCapability.Telephony.CallManager 423 424**参数:** 425 426| 参数名 | 类型 | 必填 | 说明 | 427| ----------- | -------------------------------------------- | ---- | ---------------------- | 428| phoneNumber | string | 是 | 电话号码。 | 429| options | [NumberFormatOptions](#numberformatoptions7) | 是 | 格式化参数,如国家码。 | 430 431**返回值:** 432 433| 类型 | 说明 | 434| --------------------- | ------------------------------------------- | 435| Promise<string> | 以Promise形式异步返回格式化电话号码的结果。 | 436 437**示例:** 438 439```js 440let promise = call.formatPhoneNumber("138xxxxxxxx", { 441 countryCode: "CN" 442}); 443promise.then(data => { 444 console.log(`formatPhoneNumber success, promise: data->${JSON.stringify(data)}`); 445}).catch(err => { 446 console.error(`formatPhoneNumber fail, promise: err->${JSON.stringify(err)}`); 447}); 448``` 449 450## call.formatPhoneNumberToE164<sup>7+</sup> 451 452formatPhoneNumberToE164\(phoneNumber: string, countryCode: string, callback: AsyncCallback<string\>\): void 453 454将电话号码格式化为E.164表示形式。使用callback异步回调。 455 456待格式化的电话号码需要与传入的国家码相匹配,如中国电话号码需要传入国家码CN,否则格式化后的电话号码为null。 457 458**系统能力**:SystemCapability.Telephony.CallManager 459 460**参数:** 461 462| 参数名 | 类型 | 必填 | 说明 | 463| ----------- | --------------------------- | ---- | ----------------------------------------------------- | 464| phoneNumber | string | 是 | 电话号码。 | 465| countryCode | string | 是 | 国家码,支持所有国家码,如:中国(CN)。 | 466| callback | AsyncCallback<string> | 是 | 回调函数,返回将电话号码格式化为E.164表示形式的结果。 | 467 468**示例:** 469 470```js 471call.formatPhoneNumberToE164("138xxxxxxxx",{ 472 countryCode: "CN" 473}, (err, data) => { 474 console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); 475}); 476``` 477 478 479## call.formatPhoneNumberToE164<sup>7+</sup> 480 481formatPhoneNumberToE164\(phoneNumber: string, countryCode: string\): Promise<string\> 482 483将电话号码格式化为E.164表示形式。使用Promise异步回调。 484 485待格式化的电话号码需要与传入的国家码相匹配,如中国电话号码需要传入国家码CN,否则格式化后的电话号码为null。 486 487支持所有国家码。 488 489**系统能力**:SystemCapability.Telephony.CallManager 490 491**参数:** 492 493| 参数名 | 类型 | 必填 | 说明 | 494| ----------- | ------ | ---- | ---------------------------------------- | 495| phoneNumber | string | 是 | 电话号码。 | 496| countryCode | string | 是 | 国家码,支持所有国家码,如:中国(CN)。 | 497 498**返回值:** 499 500| 类型 | 说明 | 501| --------------------- | ------------------------------------------------------------ | 502| Promise<string> | 以Promise形式异步返回将电话号码格式化为E.164表示形式的结果。 | 503 504**示例:** 505 506```js 507let promise = call.formatPhoneNumberToE164("138xxxxxxxx", { 508 countryCode: "CN" 509}); 510promise.then(data => { 511 console.log(`formatPhoneNumberToE164 success, promise: data->${JSON.stringify(data)}`); 512}).catch(err => { 513 console.error(`formatPhoneNumberToE164 fail, promise: err->${JSON.stringify(err)}`); 514}); 515``` 516 517## DialOptions 518 519拨打电话的可选参数。 520 521**系统能力**:以下各项对应的系统能力均为SystemCapability.Telephony.CallManager。 522 523| 参数名 | 类型 | 必填 | 说明 | 524| ------ | ------- | ---- | ------------------------------------------------------------ | 525| extras | boolean | 否 | 根据extras的值判断是否为视频通话,默认为语音通话。<br/>- true:视频通话。<br/>- false:语音通话。 | 526 527## CallState 528 529通话状态码。 530 531**系统能力**:以下各项对应的系统能力均为SystemCapability.Telephony.CallManager。 532 533| 名称 | 值 | 说明 | 534| ------------------ | ---- | ------------------------------------------------------------ | 535| CALL_STATE_UNKNOWN | -1 | 无效状态,当获取呼叫状态失败时返回。 | 536| CALL_STATE_IDLE | 0 | 表示没有正在进行的呼叫。 | 537| CALL_STATE_RINGING | 1 | 表示来电正在振铃或等待。 | 538| CALL_STATE_OFFHOOK | 2 | 表示至少有一个呼叫处于拨号、通话中或呼叫保持状态,并且没有新的来电振铃或等待。 | 539 540## EmergencyNumberOptions<sup>7+</sup> 541 542判断是否是紧急电话号码的可选参数。 543 544**系统能力**:以下各项对应的系统能力均为SystemCapability.Telephony.CallManager。 545 546| 参数名 | 类型 | 必填 | 说明 | 547| ------ | ------ | ---- | ---------------------------------------------- | 548| slotId | number | 否 | 卡槽ID:<br/>- 卡槽1:`0`。<br/>- 卡槽2:`1`。 | 549 550## NumberFormatOptions<sup>7+</sup> 551 552格式化号码的可选参数。 553 554**系统能力**:以下各项对应的系统能力均为SystemCapability.Telephony.CallManager。 555 556| 参数名 | 类型 | 必填 | 说明 | 557| ----------- | ------ | ---- | ---------------------------------------------------------- | 558| countryCode | string | 否 | 国家码,支持所有国家的国家码,如:CN(中国)。默认为:CN。 |