• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&lt;number&gt;, specification: string, callback: AsyncCallback<ShortMessage\>\): void
16
17根据协议数据单元(PDU)和指定的短信协议创建短信实例,使用callback方式作为异步方法。
18
19**系统能力**:SystemCapability.Telephony.SmsMms
20
21**参数:**
22
23| 参数名        | 类型                                               | 必填 | 说明                                                         |
24| ------------- | -------------------------------------------------- | ---- | ------------------------------------------------------------ |
25| pdu           | Array&lt;number&gt;                                | 是   | 协议数据单元,从收到的信息中获取。                           |
26| specification | string                                             | 是   | 短信协议类型。<br/>- 3gpp表示GSM/UMTS/LTE SMS<br/>- 3gpp2表示CDMA SMS |
27| callback      | AsyncCallback&lt;[ShortMessage](#shortmessage)&gt; | 是   | 回调函数。                                                   |
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&lt;number&gt;, specification: string\): Promise<ShortMessage\>
44
45根据协议数据单元(PDU)和指定的短信协议创建短信实例,使用Promise方式作为异步方法。
46
47**系统能力**:SystemCapability.Telephony.SmsMms
48
49**参数:**
50
51| 参数名        | 类型                | 必填 | 说明                                                         |
52| ------------- | ------------------- | ---- | ------------------------------------------------------------ |
53| pdu           | Array&lt;number&gt; | 是   | 协议数据单元,从收到的信息中获取。                           |
54| specification | string              | 是   | 短信协议类型。<br/>- 3gpp表示GSM/UMTS/LTE SMS<br/>- 3gpp2表示CDMA SMS |
55
56**返回值:**
57
58| 类型                                         | 说明                              |
59| -------------------------------------------- | --------------------------------- |
60| Promise&lt;[ShortMessage](#shortmessage)&gt; | 以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&lt;number&gt;\): void
114
115获取发送短信的默认SIM卡槽ID,使用callback方式作为异步方法。
116
117**系统能力**:SystemCapability.Telephony.SmsMms
118
119**参数:**
120
121| 参数名   | 类型                        | 必填 | 说明                                     |
122| -------- | --------------------------- | ---- | ---------------------------------------- |
123| callback | AsyncCallback&lt;number&gt; | 是   | 回调函数。<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&lt;number&gt;
137
138获取发送短信的默认SIM卡槽ID,使用Promise方式作为异步方法。
139
140**系统能力**:SystemCapability.Telephony.SmsMms
141
142**返回值:**
143
144| 类型            | 说明                                                         |
145| --------------- | ------------------------------------------------------------ |
146| Promise&lt;number&gt; | 以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&lt;void&gt; | 是   | 回调函数。                                |
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&lt;void&gt; | 以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&lt;string&gt; | 是   | 回调函数。                                |
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&lt;string&gt; | 以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.SmsMms319
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&lt;number&gt;                     | 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.SmsMms340
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.SmsMms355
356| 参数名           | 类型                                                         | 必填 | 说明                                                         |
357| ---------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
358| slotId           | number                                                       | 是   | 用于发送短信的SIM卡槽ID:<br/>- 0:卡槽1<br/>- 1:卡槽2      |
359| destinationHost  | string                                                       | 是   | 短信的发送地址。                                             |
360| content          | string \| Array&lt;number&gt;                                | 是   | 如果内容是字符串,则这是一条文本短信。如果内容是字节数组,则这是一条数据短信。 |
361| serviceCenter    | string                                                       | 否   | 短信中心地址。默认使用SIM卡中的短信中心地址。                |
362| destinationPort  | number                                                       | 否   | 如果发送数据消息,destinationPort 是必需的。否则是可选的。   |
363| sendCallback     | AsyncCallback&lt;[ISendShortMessageCallback](#isendshortmessagecallback)&gt; | 否   | 短信发送结果回调,返回短信发送的结果,参考[ISendShortMessageCallback](#isendshortmessagecallback)。 |
364| deliveryCallback | AsyncCallback&lt;[IDeliveryShortMessageCallback](#ideliveryshortmessagecallback)&gt; | 否   | 短信送达结果回调,返回短信递送报告,参考[IDeliveryShortMessageCallback](#ideliveryshortmessagecallback)。 |
365
366
367## ISendShortMessageCallback
368
369回调实例。返回短信发送结果、存储已发送短信的URI和是否为长短信的最后一部分。
370
371**系统能力**:以下各项对应的系统能力均为SystemCapability.Telephony.SmsMms372
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.SmsMms385
386| 参数名 | 类型                | 必填 | 说明           |
387| ------ | ------------------- | ---- | -------------- |
388| pdu    | Array&lt;number&gt; | 是   | 短信送达报告。 |
389
390
391## SendSmsResult
392
393短信发送结果。
394
395**系统能力**:以下各项对应的系统能力均为SystemCapability.Telephony.SmsMms396
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    | 发送短信失败,原因为网络不可用、不支持发送或接收短信。 |