当前位置: 首页 > news >正文

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

短信服务

场景介绍

短信服务模块提供了管理短信的一些基础能力,包括创建/发送短信、获取/设置发送短信的默认SIM卡槽ID、获取/设置短信服务中心地址,以及检查当前设备是否具备短信发送和接收能力等。

常见的应用场景举例如下:

  • 从网页拉起:
    • 用户在网页上浏览,看到“发送短信”按钮,点击后会拉起短信应用,预先填写收件人号码、发送内容。
  • 从应用拉起:
    • 移动应用中,用户点击“发送短信”按钮时,应用调用系统功能,拉起短信应用,预先填写收件人号码、发送内容。

基本概念

  • 短信服务

    即SMS(Short Messaging Service),是一种存储和转发服务。用户的移动电话可以通过它进行相互收发短信,内容以文本、数字或二进制非文本数据为主。发送方的信息通过短信服务中心进行储存并转发给接收方。

  • 短信服务中心

    即SMSC(Short Message Service Center),负责在基站和移动设备间中继、储存或转发短消息。移动设备到短信服务中心的协议能传输来自移动设备或朝向移动设备的短消息,协议内容遵从GSM 03.40协议。

  • 协议数据单元

    即PDU(Protocol Data Unit),PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS-2编码。7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据短信,UCS-2编码用于发送Unicode字符。

约束与限制

  1. 仅支持在标准系统上运行。
  2. 需授予发送短信权限且插入SIM卡才可成功发送短信。

接口说明

说明:
为了保证应用的运行效率,大部分API调用都是异步的,对于异步调用的API均提供了callback和Promise两种方式,以下示例采用callback回调方式,其他调用方式请参考API文档。

接口名描述
sendShortMessage(options: SendMessageOptions, callback: AsyncCallback<void>): void发送文本或数据SMS消息。需要配置ohos.permission.SEND_MESSAGES权限,该权限仅系统应用可申请。
createMessage(pdu: Array<number>, specification: string, callback: AsyncCallback<ShortMessage>): void基于协议数据单元(PDU)和指定的SMS协议创建SMS消息实例。
getDefaultSmsSlotId(callback: AsyncCallback<number>): void获取用于发送短信的默认SIM卡。
setSmscAddr(slotId: number, smscAddr: string, callback: AsyncCallback<void>): void根据指定的插槽ID设置短信服务中心的地址。
getSmscAddr(slotId: number, callback: AsyncCallback<string>): void根据指定的插槽ID获取短信服务中心地址。

发送短信(仅供系统应用使用)

  1. 声明接口调用所需要的权限:

    • 如果是想发送短信,则调用sendShortMessage接口,需要配置ohos.permission.SEND_MESSAGES权限,权限级别为system_basic。

    • 如果是想设置短信服务中心地址,则调用setSmscAddr接口,需要配置ohos.permission.SET_TELEPHONY_STATE权限,权限级别为system_basic。

    • 如果是想获取短信服务中心地址,则调用getSmscAddr接口,需要配置ohos.permission.GET_TELEPHONY_STATE权限,权限级别为system_basic。

      在申请权限前,请保证符合权限使用的基本原则。然后参考申请应用权限声明对应权限。

  2. import需要的模块。

  3. 发送SMS消息。

// 示例代码import{sms}from'@kit.TelephonyKit';import{AsyncCallback,BusinessError}from'@kit.BasicServicesKit';letsendCallback:AsyncCallback<sms.ISendShortMessageCallback>=(err:BusinessError,data:sms.ISendShortMessageCallback)=>{console.info(`sendCallback: err->${JSON.stringify(err)},>${JSON.stringify(data)}`);}letdeliveryCallback:AsyncCallback<sms.IDeliveryShortMessageCallback>=(err:BusinessError,data:sms.IDeliveryShortMessageCallback)=>{console.info(`deliveryCallback: err->${JSON.stringify(err)},>${JSON.stringify(data)}`);}letslotId:number=0;letcontent:string='短信内容';letdestinationHost:string='+861xxxxxxxxxx';letserviceCenter:string='+861xxxxxxxxxx';letdestinationPort:number=1000;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}from'@kit.AbilityKit';constMMS_BUNDLE_NAME="com.ohos.mms";constMMS_ABILITY_NAME="com.ohos.mms.MainAbility";constMMS_ENTITIES="entity.system.home";exportclassContact{contactsName:string;telephone:number;constructor(contactsName:string,telephone:number){this.contactsName=contactsName;this.telephone=telephone;}}@Entry@Componentstruct JumpMessage{privatecontext=this.getUIContext().getHostContext()ascommon.UIAbilityContext;startMMSAbilityExplicit(){// 这里完善联系人和号码;姓名主要是通过手机号来查询实际联系人名称,因此这种方式还是以手机号码为主。letparams:Array<Object>=[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("Success"+JSON.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 href="sms: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}from'@kit.AbilityKit';@Entry@Componentstruct Index{build(){Column(){Button('发送短信').onClick(()=>{letcontext=this.getUIContext().getHostContext()ascommon.UIAbilityContext;letexampleUrl="sms: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("Success"+JSON.stringify(data));}).catch(()=>{console.error("error");});})}}}

相关实例

针对短信的使用,有以下相关实例可供参考:

  • 短信服务(ArkTS)(Full SDK)(API9)
http://www.jsqmd.com/news/1329659/

相关文章:

  • Buzz:如何在本地实现专业级音频转录和翻译?
  • 单片机毕业设计-基于 L293D 驱动的充电式红外遥控智能小车设计 基于单片机的 7.4V 锂电供电红外避障小车研发(022201)
  • 政企档案升级实操:档案系统定制开发如何搭配驻场服务高效落地
  • NETSOL MRAM芯片RAID系统应用方案
  • 5分钟彻底告别Windows臃肿:Win11Debloat终极优化指南
  • PDF补丁丁多语言OCR技术解析:如何实现20+语言的高效文本识别
  • 为什么92.7%的AI 3D生成项目卡在UV重拓扑?资深TD曝光内部验证过的5步自动化修复协议
  • 鼠标连点器MouseClick:跨平台自动化点击工具完整指南
  • 泰安除甲醛公司甲醛检测测评推荐:康之居除甲醛标准、流程、避坑指南 - 信誉隆金银铂奢回收
  • TG 基础科普|厘清开发者经常混淆的几个核心概念与误区
  • Next.js Blog Boilerplate核心功能解析:Markdown支持与语法高亮全攻略
  • 从0到1开发flatten.nvim插件:核心模块设计与API实现详解
  • 从OpenClaw源码泄露看AI智能体框架的安全风险与加固实践
  • Torch-RecHub模型部署教程:ONNX导出与向量索引,从训练到生产环境一键部署
  • 面试官:LangChain 能做 Agent,为什么还需要 LangGraph?
  • 疾病数据集|从医院PACS“书签“里挖出32,735个病灶标注:零人工标注成本的超大规模多类型病灶CT数据集
  • 【AI 大模型】TraeIDE 编程工具 ( TraeIDE 简介 | DeepSeek / Kimi 自有 Token 接入完整步骤 | 大模型上下文窗口上限深度解析 | 开发注意事项与常见问题 )
  • Windows Defender控制解决方案:深度解析四层防护解除机制
  • Java缓存框架:JetCache
  • 告别复杂命令!Python-on-Whales让Docker Compose操作变得简单
  • 唐山除甲醛公司甲醛检测测评推荐:康之居除甲醛标准、流程、避坑指南 - 信誉隆金银铂奢回收
  • 三天搞定开题报告 高效实用的开题报告快速撰写指南
  • MouseClick鼠标连点器:跨平台自动化点击工具完整指南
  • 7大创意应用方案:开源中文字体如何彻底改变你的设计工作流
  • 打破平台壁垒:智能资源下载器如何让你轻松获取全网视频音频内容
  • 蚌埠除甲醛公司甲醛检测测评推荐:康之居除甲醛标准、流程、避坑指南 - 信誉隆金银铂奢回收
  • 图工程:当 Loop 不再够用之后----Graph Engineering
  • 为什么选择choosenim?Nim开发者必备的版本管理工具深度测评
  • 10分钟完成音乐分类任务:基于MSongsDB的ArtistRecognition算法实现
  • 终极解决方案:如何在macOS上完美驱动Xbox 360游戏手柄