1# Call Manager<a name="EN-US_TOPIC_0000001105058232"></a> 2 3 4## Introduction<a name="section117mcpsimp"></a> 5 6The Call Manager module mainly manages three types of calls: circuit switched \(CS\), IP multimedia subsystem \(IMS\), and over the top \(OTT\) calls. It is responsible for applying for the audio and video resources required for a call and resolving conflicts in a multi-channel call. The module consists of six parts: UI interaction \(CallServiceAbility\), service management \(CallManagerService\), call management \(Call Manager\), audio management \(Audio Manager\), video management \(Video Manager\), and Bluetooth management \(Bluetooth Manager\). 7 81. CallServiceAbility: Implements interaction with the call UI, for example, launching the keypad UI for dialup and reporting the incoming call status to the UI. 92. CallManagerService: starts and initializes the Call Manager. 103. Call Manager: processes downlink call operations \(such as dialup, answer, and onhook\) and uplink call status \(such as incoming call status and call waiting status\), and resolves conflicts that occur in a call. 114. Audio Manager: applies for audio resources for a call and releases the resources after the call ends. This part depends on the multimedia subsystem and needs to call its APIs to perform audio-related operations. 125. Video Manager: applies for video resources for a call and releases the resources after the call ends. This part depends on the multimedia subsystem and needs to call its APIs to perform video-related operations. 136. Bluetooth Manager: applies for Bluetooth resources for a call and releases the resources after the call ends. Besides, this part processes call operations initiated by Bluetooth devices, such as answering and ending calls. 14 15The following figure shows the architecture of the Call Manager module. 16 17**Figure 1** Architecture of the Call Manager module<a name="fig11440121615591"></a> 18 19 20![](figures/en-us_architecture-of-the-call-manager-module.png) 21 22## Directory Structure<a name="section128mcpsimp"></a> 23 24``` 25/base/telephony/call_manager 26├─ figures # Figures of readme files 27├─ frameworks # Frameworks 28│ ├─ js # JS code 29│ └─ native # Native code 30├─ interfaces # APIs 31│ ├─ innerkits # Internal APIs 32│ └─ kits # External APIs (such as JS APIs) 33├─ sa_profile # SA profile 34├─ services # Service code 35│ ├─ audio # Audio management 36│ ├─ bluetooth # Bluetooth call management 37│ ├─ call # Call service 38│ ├─ call_manager_service # Call Manager service 39│ ├─ call_report # Call status reporting 40│ ├─ call_setting # Call setting 41│ ├─ telephony_interaction # Telephony core service interaction 42│ └─ video # Video Manager code 43├─ test # Test code 44│ ├─ fuzztest # Fuzzy test 45│ ├─ mock # Simulation test 46│ └─ unittest # Unit test 47└─ utils # Utilities 48``` 49 50## Constraints<a name="section131mcpsimp"></a> 51 52- Programming language: JavaScript 53- In terms of software, this module needs to work with the Security subsystem, Multimedia subsystem, and Intelligent Soft Bus subsystem \(Bluetooth module\), as well as the telephony core service \(core\_service\) and cellular call module \(cellular\_call\). 54- In terms of hardware, the accommodating device must be equipped with a speaker or earphone, and a headset. 55 56## Available APIs<a name="section136mcpsimp"></a> 57 58**Table 1** External API provided by the Call Manager module 59 60<a name="table137mcpsimp"></a> 61<table><thead align="left"><tr id="row143mcpsimp"><th class="cellrowborder" valign="top" width="33.33333333333333%" id="mcps1.2.4.1.1"><p id="entry144mcpsimpp0"><a name="entry144mcpsimpp0"></a><a name="entry144mcpsimpp0"></a>Description</p> 62</th> 63<th class="cellrowborder" valign="top" width="33.33333333333333%" id="mcps1.2.4.1.2"><p id="entry145mcpsimpp0"><a name="entry145mcpsimpp0"></a><a name="entry145mcpsimpp0"></a>Description</p> 64</th> 65<th class="cellrowborder" valign="top" width="33.33333333333333%" id="mcps1.2.4.1.3"><p id="entry146mcpsimpp0"><a name="entry146mcpsimpp0"></a><a name="entry146mcpsimpp0"></a>Required Permission</p> 66</th> 67</tr> 68</thead> 69<tbody><tr id="row147mcpsimp"><td class="cellrowborder" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.1 "><p id="p143312519577"><a name="p143312519577"></a><a name="p143312519577"></a>function dial(phoneNumber: string, options: DialOptions, callback: AsyncCallback<boolean>): void;</p> 70</td> 71<td class="cellrowborder" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.2 "><p id="entry149mcpsimpp0"><a name="entry149mcpsimpp0"></a><a name="entry149mcpsimpp0"></a>Performs dialup operations.</p> 72</td> 73<td class="cellrowborder" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.3 "><p id="entry150mcpsimpp0"><a name="entry150mcpsimpp0"></a><a name="entry150mcpsimpp0"></a>ohos.permission.PLACE_CALL</p> 74</td> 75</tr> 76</tbody> 77</table> 78 79**Table 2** Parameters of the Dial API 80 81<a name="table18488202215170"></a> 82<table><thead align="left"><tr id="row748952217179"><th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.1"><p id="p1948942271710"><a name="p1948942271710"></a><a name="p1948942271710"></a>Parameter</p> 83</th> 84<th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.2"><p id="p1648972215173"><a name="p1648972215173"></a><a name="p1648972215173"></a>Description</p> 85</th> 86</tr> 87</thead> 88<tbody><tr id="row749092213171"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p14901222191720"><a name="p14901222191720"></a><a name="p14901222191720"></a>phoneNumber: string</p> 89</td> 90<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p34906228170"><a name="p34906228170"></a><a name="p34906228170"></a>Phone number</p> 91</td> 92</tr> 93<tr id="row549011221176"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p44902223175"><a name="p44902223175"></a><a name="p44902223175"></a>options: DialOptions</p> 94</td> 95<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p11490162241718"><a name="p11490162241718"></a><a name="p11490162241718"></a>Dialup options (For details, see the following table.)</p> 96</td> 97</tr> 98<tr id="row149072216176"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p5490152211715"><a name="p5490152211715"></a><a name="p5490152211715"></a>callback: AsyncCallback<boolean></p> 99</td> 100<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p649002291718"><a name="p649002291718"></a><a name="p649002291718"></a>Asynchronous execution result. Value <strong id="b1400386820"><a name="b1400386820"></a><a name="b1400386820"></a>true</strong> indicates that the dialup is successful, and value <strong id="b022154719814"><a name="b022154719814"></a><a name="b022154719814"></a>false</strong> indicates that the dialup has failed.</p> 101</td> 102</tr> 103</tbody> 104</table> 105 106**Table 3** Parameter description of options: DialOptions 107 108<a name="table1322739190"></a> 109<table><thead align="left"><tr id="row193221031194"><th class="cellrowborder" valign="top" width="20%" id="mcps1.2.6.1.1"><p id="p203224311917"><a name="p203224311917"></a><a name="p203224311917"></a>Parameter</p> 110</th> 111<th class="cellrowborder" valign="top" width="20%" id="mcps1.2.6.1.2"><p id="p1639614810198"><a name="p1639614810198"></a><a name="p1639614810198"></a>Type</p> 112</th> 113<th class="cellrowborder" valign="top" width="20%" id="mcps1.2.6.1.3"><p id="p113221730191"><a name="p113221730191"></a><a name="p113221730191"></a>Description</p> 114</th> 115<th class="cellrowborder" valign="top" width="20%" id="mcps1.2.6.1.4"><p id="p153221330197"><a name="p153221330197"></a><a name="p153221330197"></a>Mandatory</p> 116</th> 117<th class="cellrowborder" valign="top" width="20%" id="mcps1.2.6.1.5"><p id="p632220310199"><a name="p632220310199"></a><a name="p632220310199"></a>Default Value</p> 118</th> 119</tr> 120</thead> 121<tbody><tr id="row123238311920"><td class="cellrowborder" valign="top" width="20%" headers="mcps1.2.6.1.1 "><p id="p932310311197"><a name="p932310311197"></a><a name="p932310311197"></a>extras</p> 122</td> 123<td class="cellrowborder" valign="top" width="20%" headers="mcps1.2.6.1.2 "><p id="p73966801911"><a name="p73966801911"></a><a name="p73966801911"></a>boolean</p> 124</td> 125<td class="cellrowborder" valign="top" width="20%" headers="mcps1.2.6.1.3 "><p id="p19821612162118"><a name="p19821612162118"></a><a name="p19821612162118"></a><strong id="b345117841310"><a name="b345117841310"></a><a name="b345117841310"></a>false</strong>: audio; <strong id="b1701410181319"><a name="b1701410181319"></a><a name="b1701410181319"></a>true</strong>: video</p> 126</td> 127<td class="cellrowborder" valign="top" width="20%" headers="mcps1.2.6.1.4 "><p id="p33231931191"><a name="p33231931191"></a><a name="p33231931191"></a>No</p> 128</td> 129<td class="cellrowborder" valign="top" width="20%" headers="mcps1.2.6.1.5 "><p id="p12323232197"><a name="p12323232197"></a><a name="p12323232197"></a>false</p> 130</td> 131</tr> 132</tbody> 133</table> 134 135## Usage Guidelines<a name="section163mcpsimp"></a> 136 137### Calling the dial API to Place a Call<a name="section113291522113518"></a> 138 1391. Construct the **phoneNumber** and **options** parameters. 1402. Call the **Dial** API in callback or Promise mode. 1413. Obtain the dialup result. The **Dial** API works in asynchronous mode. The dialup result is returned through the callback. 142 143 ``` 144 import call from "@ohos.telephony.call"; 145 146 let phoneNumber = "12312312312"; 147 148 // Call the API in callback mode. 149 call.dial(phoneNumber, {extras: false}, (err, value) => { 150 if (err) { 151 // If the API call failed, err is not empty. 152 console.error(`failed to dial because ${err.message}`); 153 return; 154 } 155 // If the API call succeeded, err is empty. 156 console.log(`success to dial: ${value}`); 157 }); 158 159 // Call the API in Promise mode. 160 let promise = call.dial(phoneNumber, {extras: false}); 161 promise.then((value) => { 162 // The API call succeeded. 163 console.log(`success to dial: ${value}`); 164 }).catch((err) => { 165 // The API call failed. 166 console.error(`failed to dial because ${err.message}`); 167 }); 168 ``` 169 170 171## Repositories Involved<a name="section227mcpsimp"></a> 172 173[Telephony](https://gitee.com/openharmony/docs/blob/master/en/readme/telephony.md) 174 175**telephony_call_manager** 176 177[telephony_core_service](https://gitee.com/openharmony/telephony_core_service/blob/master/README.md) 178 179[telephony_cellular_call](https://gitee.com/openharmony/telephony_cellular_call/blob/master/README.md) 180 181[telephony_state_registry](https://gitee.com/openharmony/telephony_state_registry/blob/master/README.md) 182