HarmonyOS 应用开发《掌上英语》第89篇:短信服务通知模块实现

发布时间:2026/8/4 23:39:31
HarmonyOS 应用开发《掌上英语》第89篇:短信服务通知模块实现 短信服务场景介绍短信服务模块提供了管理短信的一些基础能力包括创建/发送短信、获取/设置发送短信的默认SIM卡槽ID、获取/设置短信服务中心地址以及检查当前设备是否具备短信发送和接收能力等。常见的应用场景举例如下从网页拉起用户在网页上浏览看到“发送短信”按钮点击后会拉起短信应用预先填写收件人号码、发送内容。从应用拉起移动应用中用户点击“发送短信”按钮时应用调用系统功能拉起短信应用预先填写收件人号码、发送内容。基本概念短信服务即SMSShort Messaging Service是一种存储和转发服务。用户的移动电话可以通过它进行相互收发短信内容以文本、数字或二进制非文本数据为主。发送方的信息通过短信服务中心进行储存并转发给接收方。短信服务中心即SMSCShort Message Service Center负责在基站和移动设备间中继、储存或转发短消息。移动设备到短信服务中心的协议能传输来自移动设备或朝向移动设备的短消息协议内容遵从GSM 03.40协议。协议数据单元即PDUProtocol Data UnitPDU模式收发短信可以使用3种编码7-bit、8-bit和UCS-2编码。7-bit编码用于发送普通的ASCII字符8-bit编码通常用于发送数据短信UCS-2编码用于发送Unicode字符。约束与限制仅支持在标准系统上运行。需授予发送短信权限且插入SIM卡才可成功发送短信。接口说明说明为了保证应用的运行效率大部分API调用都是异步的对于异步调用的API均提供了callback和Promise两种方式以下示例采用callback回调方式其他调用方式请参考API文档。接口名描述sendShortMessage(options: SendMessageOptions, callback: AsyncCallbackvoid): void发送文本或数据SMS消息。需要配置ohos.permission.SEND_MESSAGES权限该权限仅系统应用可申请。createMessage(pdu: Arraynumber, specification: string, callback: AsyncCallbackShortMessage): void基于协议数据单元PDU和指定的SMS协议创建SMS消息实例。getDefaultSmsSlotId(callback: AsyncCallbacknumber): void获取用于发送短信的默认SIM卡。setSmscAddr(slotId: number, smscAddr: string, callback: AsyncCallbackvoid): void根据指定的插槽ID设置短信服务中心的地址。getSmscAddr(slotId: number, callback: AsyncCallbackstring): void根据指定的插槽ID获取短信服务中心地址。发送短信仅供系统应用使用声明接口调用所需要的权限如果是想发送短信则调用sendShortMessage接口需要配置ohos.permission.SEND_MESSAGES权限权限级别为system_basic。如果是想设置短信服务中心地址则调用setSmscAddr接口需要配置ohos.permission.SET_TELEPHONY_STATE权限权限级别为system_basic。如果是想获取短信服务中心地址则调用getSmscAddr接口需要配置ohos.permission.GET_TELEPHONY_STATE权限权限级别为system_basic。在申请权限前请保证符合权限使用的基本原则。然后参考申请应用权限声明对应权限。import需要的模块。发送SMS消息。// 示例代码import{sms}fromkit.TelephonyKit;import{AsyncCallback,BusinessError}fromkit.BasicServicesKit;letsendCallback:AsyncCallbacksms.ISendShortMessageCallback(err:BusinessError,data:sms.ISendShortMessageCallback){console.info(sendCallback: err-${JSON.stringify(err)},>${JSON.stringify(data)});}letdeliveryCallback:AsyncCallbacksms.IDeliveryShortMessageCallback(err:BusinessError,data:sms.IDeliveryShortMessageCallback){console.info(deliveryCallback: err-${JSON.stringify(err)},>${JSON.stringify(data)});}letslotId:number0;letcontent:string短信内容;letdestinationHost:string861xxxxxxxxxx;letserviceCenter:string861xxxxxxxxxx;letdestinationPort:number1000;letoptions:sms.SendMessageOptions{slotId,content,destinationHost,serviceCenter,destinationPort,sendCallback,deliveryCallback};sms.sendShortMessage(options,(err:BusinessError){console.error(callback: err-${JSON.stringify(err)});});应用内跳转到短信编辑界面发送短信的接口需要系统权限才可调用三方应用如果有发送短信需求需要在应用内实现跳转到短信编辑的功能并且需要携带编辑内容和收件人号码可以通过调用元能力startAbility接口指定号码并跳转到发送短信页面的方式实现。// 示例代码import{common,Want}fromkit.AbilityKit;constMMS_BUNDLE_NAMEcom.ohos.mms;constMMS_ABILITY_NAMEcom.ohos.mms.MainAbility;constMMS_ENTITIESentity.system.home;exportclassContact{contactsName:string;telephone:number;constructor(contactsName:string,telephone:number){this.contactsNamecontactsName;this.telephonetelephone;}}EntryComponentstruct JumpMessage{privatecontextthis.getUIContext().getHostContext()ascommon.UIAbilityContext;startMMSAbilityExplicit(){// 这里完善联系人和号码姓名主要是通过手机号来查询实际联系人名称因此这种方式还是以手机号码为主。letparams:ArrayObject[newContact(张三,133XXXXXXXX)];letwant:Want{bundleName:com.ohos.mms,abilityName:com.ohos.mms.MainAbility,parameters:{contactObjects:JSON.stringify(params),pageFlag:conversation,// 这里填写短信内容。content:我是短信具体内容}};this.context.startAbilityForResult(want).then((data){console.info(SuccessJSON.stringify(data));}).catch((){console.error(error);});}build(){Row(){Column(){Button(发送短信).onClick((){this.startMMSAbilityExplicit();})}.width(100%)}.height(100%)}}sms方式跳转到短信编辑界面使用场景通过sms短信协议可以创建指向短信收件人的超链接方便用户通过网页或应用中的超链接直接跳转到短信应用。同时支持在sms:的相关字段中定义短信的收件人、发送内容等节省用户编辑短信的时间。sms协议格式sms协议标准格式如下sms:106XXXXXXXXXX?body发送短信内容sms:sms scheme必填。106XXXXXXXXXX收件人号码选填。如果存在多个地址用英文逗号分隔。?短信内容声明开始符号。如果带短信内容参数则必填。body-value发送内容参数选填。拉起方开发步骤从网页拉起网页中的超链接需要满足sms协议。示例如下a hrefsms:106XXXXXXXXXX?body%E5%8F%91%E9%80%81%E7%9F%AD%E4%BF%A1%E5%86%85%E5%AE%B9发送短信/a实际开发时需要将收件人号码替换为真实的号码短信内容可以根据需要进行配置。从应用拉起保证sms字符串传入uri参数即可在应用中page页面可通过 this.getUIContext().getHostContext() 获取context在ability中可通过this.context获取context。// 示例代码import{common,Want}fromkit.AbilityKit;EntryComponentstruct Index{build(){Column(){Button(发送短信).onClick((){letcontextthis.getUIContext().getHostContext()ascommon.UIAbilityContext;letexampleUrlsms:106XXXXXXXXXX?body%E5%8F%91%E9%80%81%E7%9F%AD%E4%BF%A1%E5%86%85%E5%AE%B9;letwant:Want{bundleName:com.ohos.mms,action:ohos.want.action.viewData,uri:exampleUrl,}context.startAbility(want).then((data){console.info(SuccessJSON.stringify(data));}).catch((){console.error(error);});})}}}相关实例针对短信的使用有以下相关实例可供参考短信服务ArkTSFull SDKAPI9