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 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<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 isImsSwitchEnabledSync(slotId: number):boolean;</p> 78</td> 79<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>Checks if VoLTE HD calling is enabled(The parameter slotId represents the SIM card ID, where 0 indicates Card 1 and 1 indicates Card 2).</p> 80</td> 81<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> 82</td> 83</tr> 84</tbody> 85</table> 86 87 88 89**Table 2** Parameters of the Dial API 90 91<a name="table18488202215170"></a> 92<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> 93</th> 94<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> 95</th> 96</tr> 97</thead> 98<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> 99</td> 100<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> 101</td> 102</tr> 103<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> 104</td> 105<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> 106</td> 107</tr> 108<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> 109</td> 110<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> 111</td> 112</tr> 113</tbody> 114</table> 115 116**Table 3** Parameter description of options: DialOptions 117 118<a name="table1322739190"></a> 119<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> 120</th> 121<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> 122</th> 123<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> 124</th> 125<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> 126</th> 127<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> 128</th> 129</tr> 130</thead> 131<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> 132</td> 133<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> 134</td> 135<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> 136</td> 137<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> 138</td> 139<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> 140</td> 141</tr> 142</tbody> 143</table> 144 145## Usage Guidelines<a name="section163mcpsimp"></a> 146 147### Calling the dial API to Place a Call<a name="section113291522113518"></a> 148 1491. Construct the **phoneNumber** and **options** parameters. 1502. Call the **Dial** API in callback or Promise mode. 1513. Obtain the dialup result. The **Dial** API works in asynchronous mode. The dialup result is returned through the callback. 152 153 ``` 154 import call from "@ohos.telephony.call"; 155 156 let phoneNumber = "12312312312"; 157 158 // Call the API in callback mode. 159 call.dial(phoneNumber, {extras: false}, (err, value) => { 160 if (err) { 161 // If the API call failed, err is not empty. 162 console.error(`failed to dial because ${err.message}`); 163 return; 164 } 165 // If the API call succeeded, err is empty. 166 console.log(`success to dial: ${value}`); 167 }); 168 169 // Call the API in Promise mode. 170 let promise = call.dial(phoneNumber, {extras: false}); 171 promise.then((value) => { 172 // The API call succeeded. 173 console.log(`success to dial: ${value}`); 174 }).catch((err) => { 175 // The API call failed. 176 console.error(`failed to dial because ${err.message}`); 177 }); 178 ``` 179 180### Check if VoLTE HD calling is enabled<a name="section113291522113520"></a> 181 1821. You can check if VoLTE HD calling service is enabled by invoking isImsSwitchEnabledSync. 183 1842. This interface is a synchronous interface, and theThis interface is a synchronous interface, and the returned from isImsSwitch and the relevant execution results will be returned from isImsSwitchEnabledSync. 185 186 ``` 187 import call from "@ohos.telephony.call"; 188 189 try { 190 // Call the interface [Sync method] 191 let isEnabled: boolean = data.isImsSwitchEnabledSync(0); 192 // Call the interface successfully 193 console.log(`isImsSwitchEnabledSync success : ${isEnabled}`); 194 } catch (error) { 195 // Call the interface failed 196 console.log(`isImsSwitchEnabledSync failed`); 197 } 198 ``` 199 200## Repositories Involved<a name="section227mcpsimp"></a> 201 202[Telephony](https://gitee.com/openharmony/docs/blob/master/en/readme/telephony.md) 203 204**telephony_call_manager** 205 206[telephony_core_service](https://gitee.com/openharmony/telephony_core_service/blob/master/README.md) 207 208[telephony_cellular_call](https://gitee.com/openharmony/telephony_cellular_call/blob/master/README.md) 209 210[telephony_state_registry](https://gitee.com/openharmony/telephony_state_registry/blob/master/README.md) 211