1# 短信服务 2 3>**说明:** 4> 5>本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 6 7## 导入模块 8 9``` 10import sms from '@ohos.telephony.sms'; 11``` 12 13## sms.createMessage 14 15createMessage\(pdu: Array<number>, specification: string, callback: AsyncCallback<ShortMessage\>\): void 16 17根据协议数据单元(PDU)和指定的短信协议创建短信实例,使用callback方式作为异步方法。 18 19**系统能力**:SystemCapability.Telephony.SmsMms 20 21**参数:** 22 23| 参数名 | 类型 | 必填 | 说明 | 24| ------------- | -------------------------------------------------- | ---- | ------------------------------------------------------------ | 25| pdu | Array<number> | 是 | 协议数据单元,从收到的信息中获取。 | 26| specification | string | 是 | 短信协议类型。<br/>- 3gpp表示GSM/UMTS/LTE SMS<br/>- 3gpp2表示CDMA SMS | 27| callback | AsyncCallback<[ShortMessage](#shortmessage)> | 是 | 回调函数。 | 28 29**示例:** 30 31``` 32const specification = '3gpp'; 33// 以数组的形式显示协议数据单元(PDU),类型为number,例如[0x08, 0x91, ...] 34const pdu = [0x08, 0x91]; 35sms.createMessage(pdu, specification, (err, data) => { 36 console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); 37}); 38``` 39 40 41## sms.createMessage 42 43createMessage\(pdu: Array<number>, specification: string\): Promise<ShortMessage\> 44 45根据协议数据单元(PDU)和指定的短信协议创建短信实例,使用Promise方式作为异步方法。 46 47**系统能力**:SystemCapability.Telephony.SmsMms 48 49**参数:** 50 51| 参数名 | 类型 | 必填 | 说明 | 52| ------------- | ------------------- | ---- | ------------------------------------------------------------ | 53| pdu | Array<number> | 是 | 协议数据单元,从收到的信息中获取。 | 54| specification | string | 是 | 短信协议类型。<br/>- 3gpp表示GSM/UMTS/LTE SMS<br/>- 3gpp2表示CDMA SMS | 55 56**返回值:** 57 58| 类型 | 说明 | 59| -------------------------------------------- | --------------------------------- | 60| Promise<[ShortMessage](#shortmessage)> | 以Promise形式返回创建的短信实例。 | 61 62**示例:** 63 64``` 65const specification = '3gpp'; 66// 以数组的形式显示协议数据单元(PDU),类型为number,例如[0x08, 0x91, ...] 67const pdu = [0x08, 0x91]; 68let promise = sms.createMessage(pdu, specification); 69promise.then(data => { 70 console.log(`createMessage success, promise: data->${JSON.stringify(data)}`); 71}).catch(err => { 72 console.error(`createMessage fail, promise: err->${JSON.stringify(err)}`); 73}); 74``` 75 76## sms.sendMessage 77 78sendMessage(options: SendMessageOptions): void 79 80发送短信。 81 82**需要权限**:ohos.permission.SEND_MESSAGES 83 84**系统能力**:SystemCapability.Telephony.SmsMms 85 86**参数:** 87 88| 参数名 | 类型 | 必填 | 说明 | 89| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 90| options | [SendMessageOptions](#sendmessageoptions) | 是 | 发送短信的参数和回调,参考[SendMessageOptions](#sendmessageoptions)。 | 91 92**示例:** 93 94``` 95let sendCallback = function (err, data) { 96 console.log(`sendCallback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); 97} 98let deliveryCallback = function (err, data) { 99 console.log(`deliveryCallback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); 100} 101let slotId = 0; 102let content = '短信内容'; 103let destinationHost = '+861xxxxxxxxxx'; 104let serviceCenter = '+861xxxxxxxxxx'; 105let destinationPort = 1000; 106let options = {slotId, content, destinationHost, serviceCenter, destinationPort, sendCallback, deliveryCallback}; 107sms.sendMessage(options); 108``` 109 110 111## sms.getDefaultSmsSlotId<sup>7+</sup> 112 113getDefaultSmsSlotId\(callback: AsyncCallback<number>\): void 114 115获取发送短信的默认SIM卡槽ID,使用callback方式作为异步方法。 116 117**系统能力**:SystemCapability.Telephony.SmsMms 118 119**参数:** 120 121| 参数名 | 类型 | 必填 | 说明 | 122| -------- | --------------------------- | ---- | ---------------------------------------- | 123| callback | AsyncCallback<number> | 是 | 回调函数。<br/>- 0:卡槽1<br/>- 1:卡槽2 | 124 125**示例:** 126 127``` 128sms.getDefaultSmsSlotId((err, data) => { 129 console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); 130}); 131``` 132 133 134## sms.getDefaultSmsSlotId<sup>7+</sup> 135 136getDefaultSmsSlotId\(\): Promise<number> 137 138获取发送短信的默认SIM卡槽ID,使用Promise方式作为异步方法。 139 140**系统能力**:SystemCapability.Telephony.SmsMms 141 142**返回值:** 143 144| 类型 | 说明 | 145| --------------- | ------------------------------------------------------------ | 146| Promise<number> | 以Promise形式返回发送短信的默认SIM卡:<br/>- 0:卡槽1<br/>- 1:卡槽2 | 147 148**示例:** 149 150``` 151let promise = sms.getDefaultSmsSlotId(); 152promise.then(data => { 153 console.log(`getDefaultSmsSlotId success, promise: data->${JSON.stringify(data)}`); 154}).catch(err => { 155 console.error(`getDefaultSmsSlotId fail, promise: err->${JSON.stringify(err)}`); 156}); 157``` 158 159 160## sms.setSmscAddr<sup>7+</sup> 161 162setSmscAddr\(slotId: number, smscAddr: string, callback: AsyncCallback<void\>\): void 163 164设置短信服务中心(SMSC)地址,使用callback方式作为异步方法。 165 166**需要权限**:ohos.permission.SET_TELEPHONY_STATE,该权限为系统权限 167 168**系统能力**:SystemCapability.Telephony.SmsMms 169 170**系统API**:该接口为系统接口,三方应用不支持调用。 171 172**参数:** 173 174| 参数名 | 类型 | 必填 | 说明 | 175| -------- | ------------------------- | ---- | ----------------------------------------- | 176| slotId | number | 是 | SIM卡槽ID:<br/>- 0:卡槽1<br/>- 1:卡槽2 | 177| smscAddr | string | 是 | 短信服务中心地址。 | 178| callback | AsyncCallback<void> | 是 | 回调函数。 | 179 180**示例:** 181 182``` 183let slotId = 0; 184let smscAddr = '+861xxxxxxxxxx'; 185sms.setSmscAddr(slotId, smscAddr, (err,data) => { 186 console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); 187}); 188``` 189 190 191## sms.setSmscAddr<sup>7+</sup> 192 193setSmscAddr\(slotId: number, smscAddr: string\): Promise<void\> 194 195设置短信服务中心(SMSC)地址,使用Promise方式作为异步方法。 196 197**需要权限**:ohos.permission.SET_TELEPHONY_STATE,该权限为系统权限 198 199**系统能力**:SystemCapability.Telephony.SmsMms 200 201**系统API**:该接口为系统接口,三方应用不支持调用。 202 203**参数:** 204 205| 参数名 | 类型 | 必填 | 说明 | 206| -------- | ------ | ---- | ----------------------------------------- | 207| slotId | number | 是 | SIM卡槽ID:<br/>- 0:卡槽1<br/>- 1:卡槽2 | 208| smscAddr | string | 是 | 短信服务中心地址。 | 209 210**返回值:** 211 212| 类型 | 说明 | 213| ------------------- | ------------------------------- | 214| Promise<void> | 以Promise形式异步返回设置结果。 | 215 216**示例:** 217 218``` 219let slotId = 0; 220let smscAddr = '+861xxxxxxxxxx'; 221let promise = sms.setSmscAddr(slotId, smscAddr); 222promise.then(data => { 223 console.log(`setSmscAddr success, promise: data->${JSON.stringify(data)}`); 224}).catch(err => { 225 console.error(`setSmscAddr fail, promise: err->${JSON.stringify(err)}`); 226}); 227``` 228 229 230## sms.getSmscAddr<sup>7+</sup> 231 232getSmscAddr\(slotId: number, callback: AsyncCallback<string\>\): void 233 234获取短信服务中心(SMSC)地址,使用callback方式作为异步方法。 235 236**需要权限**:ohos.permission.GET_TELEPHONY_STATE,该权限为系统权限 237 238**系统能力**:SystemCapability.Telephony.SmsMms 239 240**系统API**:该接口为系统接口,三方应用不支持调用。 241 242**参数:** 243 244| 参数名 | 类型 | 必填 | 说明 | 245| -------- | --------------------------- | ---- | ----------------------------------------- | 246| slotId | number | 是 | SIM卡槽ID:<br/>- 0:卡槽1<br/>- 1:卡槽2 | 247| callback | AsyncCallback<string> | 是 | 回调函数。 | 248 249**示例:** 250 251``` 252let slotId = 0; 253sms.getSmscAddr(slotId, (err, data) => { 254 console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); 255}); 256``` 257 258 259## sms.getSmscAddr<sup>7+</sup> 260 261getSmscAddr\(slotId: number\): Promise<string\> 262 263获取短信服务中心(SMSC)地址,使用Promise方式作为异步方法。 264 265**需要权限**:ohos.permission.GET_TELEPHONY_STATE,该权限为系统权限 266 267**系统能力**:SystemCapability.Telephony.SmsMms 268 269**系统API**:该接口为系统接口,三方应用不支持调用。 270 271**参数:** 272 273| 参数名 | 类型 | 必填 | 说明 | 274| ------ | ------ | ---- | ----------------------------------------- | 275| slotId | number | 是 | SIM卡槽ID:<br/>- 0:卡槽1<br/>- 1:卡槽2 | 276 277**返回值:** 278 279| 类型 | 说明 | 280| --------------------- | --------------------------------------------- | 281| Promise<string> | 以Promise形式返回获取短信服务中心地址的结果。 | 282 283**示例:** 284 285``` 286let slotId = 0; 287let promise = sms.getSmscAddr(slotId); 288promise.then(data => { 289 console.log(`getSmscAddr success, promise: data->${JSON.stringify(data)}`); 290}).catch(err => { 291 console.error(`getSmscAddr fail, promise: err->${JSON.stringify(err)}`); 292}); 293``` 294 295## sms.hasSmsCapability<sup>7+</sup> 296 297hasSmsCapability(): boolean 298 299检查当前设备是否具备短信发送和接收能力,该方法是同步方法。 300 301**系统能力**:SystemCapability.Telephony.SmsMms 302 303**返回值:** 304 305| 类型 | 说明 | 306| ------- | ------------------------------------------------------------ | 307| boolean | - true:设备具备短信发送和接收能力<br/>- false:设备不具备短信发送和接收能力 | 308 309``` 310let result = sms.hasSmsCapability(); 311console.log(`hasSmsCapability: ${JSON.stringify(result)}`); 312``` 313 314## ShortMessage 315 316短信实例。 317 318**系统能力**:以下各项对应的系统能力均为SystemCapability.Telephony.SmsMms。 319 320| 参数名 | 类型 | 说明 | 321| ------------------------ | --------------------------------------- | ------------------------------------------------------------ | 322| hasReplyPath | boolean | 收到的短信是否包含“TP-Reply-Path”,默认为false。<br/>“TP-Reply-Path”:设备根据发送SMS消息的短消息中心进行回复。 | 323| isReplaceMessage | boolean | 收到的短信是否为“替换短信”,默认为false。<br/>“替换短信”有关详细信息,参见 “3GPP TS 23.040 9.2.3.9”。 | 324| isSmsStatusReportMessage | boolean | 当前消息是否为“短信状态报告”,默认为false。<br/>“短信状态报告”是一种特定格式的短信,被用来从Service Center到Mobile Station传送状态报告。 | 325| messageClass | [ShortMessageClass](#shortmessageclass) | 短信类型。 | 326| pdu | Array<number> | SMS消息中的协议数据单元 (PDU)。 | 327| protocolId | number | 发送短信时使用的协议标识。 | 328| scAddress | string | 短消息服务中心(SMSC)地址。 | 329| scTimestamp | number | SMSC时间戳。 | 330| status | number | SMS-STATUS-REPORT消息中的短信状态指示短信服务中心(SMSC)发送的短信状态。 | 331| visibleMessageBody | string | 短信正文。 | 332| visibleRawAddress | string | 发送者地址。 | 333 334 335## ShortMessageClass 336 337短信类型。 338 339**系统能力**:以下各项对应的系统能力均为SystemCapability.Telephony.SmsMms。 340 341| 名称 | 值 | 说明 | 342| ---------------- | ---- | ---------------------------------------- | 343| UNKNOWN | 0 | 未知类型。 | 344| INSTANT_MESSAGE | 1 | 即时消息,收到后立即显示。 | 345| OPTIONAL_MESSAGE | 2 | 存储在设备或SIM卡上的短信。 | 346| SIM_MESSAGE | 3 | 包含SIM卡信息的短信,需要存储在SIM卡中。 | 347| FORWARD_MESSAGE | 4 | 要转发到另一台设备的短信。 | 348 349 350## SendMessageOptions 351 352发送短信的参数和回调。根据SendMessageOptions中的可选参数content的值判断短信类型。 353 354**系统能力**:以下各项对应的系统能力均为SystemCapability.Telephony.SmsMms。 355 356| 参数名 | 类型 | 必填 | 说明 | 357| ---------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 358| slotId | number | 是 | 用于发送短信的SIM卡槽ID:<br/>- 0:卡槽1<br/>- 1:卡槽2 | 359| destinationHost | string | 是 | 短信的发送地址。 | 360| content | string \| Array<number> | 是 | 如果内容是字符串,则这是一条文本短信。如果内容是字节数组,则这是一条数据短信。 | 361| serviceCenter | string | 否 | 短信中心地址。默认使用SIM卡中的短信中心地址。 | 362| destinationPort | number | 否 | 如果发送数据消息,destinationPort 是必需的。否则是可选的。 | 363| sendCallback | AsyncCallback<[ISendShortMessageCallback](#isendshortmessagecallback)> | 否 | 短信发送结果回调,返回短信发送的结果,参考[ISendShortMessageCallback](#isendshortmessagecallback)。 | 364| deliveryCallback | AsyncCallback<[IDeliveryShortMessageCallback](#ideliveryshortmessagecallback)> | 否 | 短信送达结果回调,返回短信递送报告,参考[IDeliveryShortMessageCallback](#ideliveryshortmessagecallback)。 | 365 366 367## ISendShortMessageCallback 368 369回调实例。返回短信发送结果、存储已发送短信的URI和是否为长短信的最后一部分。 370 371**系统能力**:以下各项对应的系统能力均为SystemCapability.Telephony.SmsMms。 372 373| 参数名 | 类型 | 必填 | 说明 | 374| ---------- | ------------------------------- | ---- | ------------------------------------------------------------ | 375| isLastPart | boolean | 否 | 指定这是否是长短信的最后一部分。true表示这是长短信的最后一部分,false表示不是。默认为false。 | 376| result | [SendSmsResult](#sendsmsresult) | 是 | 短信发送结果。 | 377| url | string | 是 | 存储发送短信的URI。 | 378 379 380## IDeliveryShortMessageCallback 381 382回调实例。返回短信送达报告。 383 384**系统能力**:以下各项对应的系统能力均为SystemCapability.Telephony.SmsMms。 385 386| 参数名 | 类型 | 必填 | 说明 | 387| ------ | ------------------- | ---- | -------------- | 388| pdu | Array<number> | 是 | 短信送达报告。 | 389 390 391## SendSmsResult 392 393短信发送结果。 394 395**系统能力**:以下各项对应的系统能力均为SystemCapability.Telephony.SmsMms。 396 397| 名称 | 值 | 说明 | 398| ------------------------------------ | ---- | ------------------------------------------------------ | 399| SEND_SMS_SUCCESS | 0 | 发送短信成功。 | 400| SEND_SMS_FAILURE_UNKNOWN | 1 | 发送短信失败,原因未知。 | 401| SEND_SMS_FAILURE_RADIO_OFF | 2 | 发送短信失败,原因为调制解调器关机。 | 402| SEND_SMS_FAILURE_SERVICE_UNAVAILABLE | 3 | 发送短信失败,原因为网络不可用、不支持发送或接收短信。 |