鸿蒙开发电话服务:【 @ohos.telephony.sms (短信服务)】
短信服务
说明:
本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
导入模块
import sms from '@ohos.telephony.sms';
sms.createMessage
createMessage(pdu: Array, specification: string, callback: AsyncCallback): void
根据协议数据单元(PDU)和指定的短信协议创建短信实例,使用callback方式作为异步方法。
系统能力:SystemCapability.Telephony.SmsMms
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| pdu | Array | 是 | 协议数据单元,从收到的信息中获取。 |
| specification | string | 是 | 短信协议类型。 - 3gpp表示GSM/UMTS/LTE SMS - 3gpp2表示CDMA SMS |
| callback | AsyncCallback<[ShortMessage]> | 是 | 回调函数。 |
示例:
const specification = '3gpp';
// 以数组的形式显示协议数据单元(PDU),类型为number,例如[0x08, 0x91, ...]
const pdu = [0x08, 0x91];
sms.createMessage(pdu, specification, (err, data) => {console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`);
});
sms.createMessage
createMessage(pdu: Array, specification: string): Promise
根据协议数据单元(PDU)和指定的短信协议创建短信实例,使用Promise方式作为异步方法。
系统能力:SystemCapability.Telephony.SmsMms
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| pdu | Array | 是 | 协议数据单元,从收到的信息中获取。 |
| specification | string | 是 | 短信协议类型。 - 3gpp表示GSM/UMTS/LTE SMS - 3gpp2表示CDMA SMS |
返回值:
| 类型 | 说明 |
|---|---|
| Promise<[ShortMessage]> | 以Promise形式返回创建的短信实例。 |
示例:
const specification = '3gpp';
// 以数组的形式显示协议数据单元(PDU),类型为number,例如[0x08, 0x91, ...]
const pdu = [0x08, 0x91];
let promise = sms.createMessage(pdu, specification);
promise.then(data => {console.log(`createMessage success, promise: data->${JSON.stringify(data)}`);
}).catch(err => {console.error(`createMessage fail, promise: err->${JSON.stringify(err)}`);
});
sms.sendMessage
sendMessage(options: SendMessageOptions): void
发送短信。
需要权限:ohos.permission.SEND_MESSAGES
系统能力:SystemCapability.Telephony.SmsMms
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| options | [SendMessageOptions] | 是 | 发送短信的参数和回调,参考[SendMessageOptions]。 |
示例:
let sendCallback = function (err, data) { console.log(`sendCallback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`);
}
let deliveryCallback = function (err, data) { console.log(`deliveryCallback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`);
}
let slotId = 0;
let content = '短信内容';
let destinationHost = '+861xxxxxxxxxx';
let serviceCenter = '+861xxxxxxxxxx';
let destinationPort = 1000;
let options = {slotId, content, destinationHost, serviceCenter, destinationPort, sendCallback, deliveryCallback};
sms.sendMessage(options);
sms.getDefaultSmsSlotId7+
getDefaultSmsSlotId(callback: AsyncCallback): void
获取发送短信的默认SIM卡槽ID,使用callback方式作为异步方法。
系统能力:SystemCapability.Telephony.SmsMms
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| callback | AsyncCallback | 是 | 回调函数。 - 0:卡槽1 - 1:卡槽2 |
示例:
sms.getDefaultSmsSlotId((err, data) => {console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`);
});
sms.getDefaultSmsSlotId7+
getDefaultSmsSlotId(): Promise
获取发送短信的默认SIM卡槽ID,使用Promise方式作为异步方法。
系统能力:SystemCapability.Telephony.SmsMms
返回值:
| 类型 | 说明 |
|---|---|
| Promise | 以Promise形式返回发送短信的默认SIM卡: - 0:卡槽1 - 1:卡槽2 |
示例:
let promise = sms.getDefaultSmsSlotId();
promise.then(data => {console.log(`getDefaultSmsSlotId success, promise: data->${JSON.stringify(data)}`);
}).catch(err => {console.error(`getDefaultSmsSlotId fail, promise: err->${JSON.stringify(err)}`);
});
sms.setSmscAddr7+
setSmscAddr(slotId: number, smscAddr: string, callback: AsyncCallback): void
设置短信服务中心(SMSC)地址,使用callback方式作为异步方法。
需要权限:ohos.permission.SET_TELEPHONY_STATE,该权限为系统权限
系统能力:SystemCapability.Telephony.SmsMms
系统API:该接口为系统接口,三方应用不支持调用。
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| slotId | number | 是 | SIM卡槽ID: - 0:卡槽1 - 1:卡槽2 |
| smscAddr | string | 是 | 短信服务中心地址。 |
| callback | AsyncCallback | 是 | 回调函数。 |
示例:
let slotId = 0;
let smscAddr = '+861xxxxxxxxxx';
sms.setSmscAddr(slotId, smscAddr, (err,data) => {console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`);
});
sms.setSmscAddr7+
setSmscAddr(slotId: number, smscAddr: string): Promise
设置短信服务中心(SMSC)地址,使用Promise方式作为异步方法。
需要权限:ohos.permission.SET_TELEPHONY_STATE,该权限为系统权限
系统能力:SystemCapability.Telephony.SmsMms
系统API:该接口为系统接口,三方应用不支持调用。
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| slotId | number | 是 | SIM卡槽ID: - 0:卡槽1 - 1:卡槽2 |
| smscAddr | string | 是 | 短信服务中心地址。 |
返回值:
| 类型 | 说明 |
|---|---|
| Promise | 以Promise形式异步返回设置结果。 |
示例:
let slotId = 0;
let smscAddr = '+861xxxxxxxxxx';
let promise = sms.setSmscAddr(slotId, smscAddr);
promise.then(data => {console.log(`setSmscAddr success, promise: data->${JSON.stringify(data)}`);
}).catch(err => {console.error(`setSmscAddr fail, promise: err->${JSON.stringify(err)}`);
});
sms.getSmscAddr7+
getSmscAddr(slotId: number, callback: AsyncCallback): void
获取短信服务中心(SMSC)地址,使用callback方式作为异步方法。
需要权限:ohos.permission.GET_TELEPHONY_STATE,该权限为系统权限
系统能力:SystemCapability.Telephony.SmsMms
系统API:该接口为系统接口,三方应用不支持调用。
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| slotId | number | 是 | SIM卡槽ID: - 0:卡槽1 - 1:卡槽2 |
| callback | AsyncCallback | 是 | 回调函数。 |
示例:
let slotId = 0;
sms.getSmscAddr(slotId, (err, data) => {console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`);
});
sms.getSmscAddr7+
getSmscAddr(slotId: number): Promise
获取短信服务中心(SMSC)地址,使用Promise方式作为异步方法。
需要权限:ohos.permission.GET_TELEPHONY_STATE,该权限为系统权限
系统能力:SystemCapability.Telephony.SmsMms
系统API:该接口为系统接口,三方应用不支持调用。
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| slotId | number | 是 | SIM卡槽ID: - 0:卡槽1 - 1:卡槽2 |
返回值:
| 类型 | 说明 |
|---|---|
| Promise | 以Promise形式返回获取短信服务中心地址的结果。 |
示例:
let slotId = 0;
let promise = sms.getSmscAddr(slotId);
promise.then(data => {console.log(`getSmscAddr success, promise: data->${JSON.stringify(data)}`);
}).catch(err => {console.error(`getSmscAddr fail, promise: err->${JSON.stringify(err)}`);
});
sms.hasSmsCapability7+
hasSmsCapability(): boolean
检查当前设备是否具备短信发送和接收能力,该方法是同步方法。
系统能力:SystemCapability.Telephony.SmsMms
返回值:
| 类型 | 说明 |
|---|---|
| boolean | - true:设备具备短信发送和接收能力 - false:设备不具备短信发送和接收能力 |
let result = sms.hasSmsCapability();
console.log(`hasSmsCapability: ${JSON.stringify(result)}`);
ShortMessage
短信实例。
系统能力:以下各项对应的系统能力均为SystemCapability.Telephony.SmsMms。
| 参数名 | 类型 | 说明 |
|---|---|---|
| hasReplyPath | boolean | 收到的短信是否包含“TP-Reply-Path”,默认为false。 “TP-Reply-Path”:设备根据发送SMS消息的短消息中心进行回复。 |
| isReplaceMessage | boolean | 收到的短信是否为“替换短信”,默认为false。 “替换短信”有关详细信息,参见 “3GPP TS 23.040 9.2.3.9”。 |
| isSmsStatusReportMessage | boolean | 当前消息是否为“短信状态报告”,默认为false。 “短信状态报告”是一种特定格式的短信,被用来从Service Center到Mobile Station传送状态报告。 |
| messageClass | [ShortMessageClass] | 短信类型。 |
| pdu | Array | SMS消息中的协议数据单元 (PDU)。 |
| protocolId | number | 发送短信时使用的协议标识。 |
| scAddress | string | 短消息服务中心(SMSC)地址。 |
| scTimestamp | number | SMSC时间戳。 |
| status | number | SMS-STATUS-REPORT消息中的短信状态指示短信服务中心(SMSC)发送的短信状态。 |
| visibleMessageBody | string | 短信正文。 |
| visibleRawAddress | string | 发送者地址。 |
ShortMessageClass
短信类型。
系统能力:以下各项对应的系统能力均为SystemCapability.Telephony.SmsMms。
| 名称 | 值 | 说明 |
|---|---|---|
| UNKNOWN | 0 | 未知类型。 |
| INSTANT_MESSAGE | 1 | 即时消息,收到后立即显示。 |
| OPTIONAL_MESSAGE | 2 | 存储在设备或SIM卡上的短信。 |
| SIM_MESSAGE | 3 | 包含SIM卡信息的短信,需要存储在SIM卡中。 |
| FORWARD_MESSAGE | 4 | 要转发到另一台设备的短信。 |
SendMessageOptions
发送短信的参数和回调。根据SendMessageOptions中的可选参数content的值判断短信类型。
系统能力:以下各项对应的系统能力均为SystemCapability.Telephony.SmsMms。
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| slotId | number | 是 | 用于发送短信的SIM卡槽ID: - 0:卡槽1 - 1:卡槽2 |
| destinationHost | string | 是 | 短信的发送地址。 |
| content | string | Array | 是 |
| serviceCenter | string | 否 | 短信中心地址。默认使用SIM卡中的短信中心地址。 |
| destinationPort | number | 否 | 如果发送数据消息,destinationPort 是必需的。否则是可选的。 |
| sendCallback | AsyncCallback<[ISendShortMessageCallback]> | 否 | 短信发送结果回调,返回短信发送的结果,参考[ISendShortMessageCallback]。 |
| deliveryCallback | AsyncCallback<[IDeliveryShortMessageCallback]> | 否 | 短信送达结果回调,返回短信递送报告,参考[IDeliveryShortMessageCallback]。 |
ISendShortMessageCallback
回调实例。返回短信发送结果、存储已发送短信的URI和是否为长短信的最后一部分。
系统能力:以下各项对应的系统能力均为SystemCapability.Telephony.SmsMms。
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| isLastPart | boolean | 否 | 指定这是否是长短信的最后一部分。true表示这是长短信的最后一部分,false表示不是。默认为false。 |
| result | [SendSmsResult] | 是 | 短信发送结果。 |
| url | string | 是 | 存储发送短信的URI。 |
IDeliveryShortMessageCallback
回调实例。返回短信送达报告。
系统能力:以下各项对应的系统能力均为SystemCapability.Telephony.SmsMms。
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| pdu | Array | 是 | 短信送达报告。 |
SendSmsResult
短信发送结果。
系统能力:以下各项对应的系统能力均为SystemCapability.Telephony.SmsMms。
| 名称 | 值 | 说明 |
|---|---|---|
| SEND_SMS_SUCCESS | 0 | 发送短信成功。 |
| SEND_SMS_FAILURE_UNKNOWN | 1 | 发送短信失败,原因未知。 |
| SEND_SMS_FAILURE_RADIO_OFF | 2 | 发送短信失败,原因为调制解调器关机。 |
| SEND_SMS_FAILURE_SERVICE_UNAVAILABLE | 3 | 发送短信失败,原因为网络不可用、不支持发送或接收短信。 |
相关文章:
鸿蒙开发电话服务:【 @ohos.telephony.sms (短信服务)】
短信服务 说明: 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import sms from ohos.telephony.sms;sms.createMessage createMessage(pdu: Array, specification: string, callback: Asy…...
算法02 递归算法及其相关问题【C++实现】
递归 在编程中,我们把函数直接或者间接调用自身的过程叫做递归。 递归处理问题的过程是:通常把一个大型的复杂问题,转变成一个与原问题类似的,规模更小的问题来进行求解。 递归的三大要素 函数的参数。在用递归解决问题时&…...
Sermant标签路由能力在同城双活场景的应用
作者:聂子雄 华为云高级软件工程师 摘要:目前应用上云已成为趋势,用户也对应用在云上的高可靠方案有更高追求,目前同城双活场景作为应用高可靠方案中的一种常见实践方案,对微服务流量提出了数据中心亲和性的要求&…...
javascript-obfuscator混淆
安装 npm install javascript-obfuscator -g 配置 重度混淆,性能低 性能下降50-100% { "compact": true, "controlFlowFlattening": true, "controlFlowFlatteningThreshold": 0.75, // 设置为0到1之间的值 "deadCodeI…...
GitHub项目里的api
在一个GitHub项目中提到的"api"通常指的是该项目提供的应用程序编程接口(Application Programming Interface)。这意味着该项目包含了一套规则和工具,允许其他开发者通过代码调用该接口来与项目功能互动、获取数据或执行特定任务。…...
k8s可练习实验分享
实验环境介绍:单master节点+3node节点 环境已提前配置完毕,如果你环境还未做,请移步 k8s集群V1.27.3安装 在 k8s 上可以做许多实验来提升你的动手能力和理解。以下是一些常见且有用的实验项目: 1、部署一个简单的应用…...
浏览器支持http-flv协议
Google Chrome 浏览器和Microsoft Edge 浏览器原生并不支持 HTTP-FLV 协议。HTTP-FLV 主要与 Flash Player 相关,而 Flash Player 已经在 2020 年底停止支持,并且 Microsoft Edge 也逐步淘汰了对 Flash 的支持。 flv.js 利用 HTML5 和 Media Source Exte…...
一千题,No.0077(计算谱半径)
在数学中,矩阵的“谱半径”是指其特征值的模集合的上确界。换言之,对于给定的 n 个复数空间的特征值 { a1b1i,⋯,anbni },它们的模为实部与虚部的平方和的开方,而“谱半径”就是最大模。 现在给定一些复数空间的特征值&a…...
安卓/iOS/Linux系统影音边下边播P2P传输解决方案
在当今的数字时代,IPTV 影音行业正经历着快速的发展和变革,但影音行业的流量带宽成本一直很高,有没有什么办法既能保证现有的用户观看体验,又能很好降低流量带宽成本呢? P2P技术可能是一个很好的选择,它不仅仅可以提…...
STORM论文阅读笔记
这是篇NIPS2023的 world model 论文文章提出,WM的误差会在训练过程中积累从而影响policy的训练,向WM中加噪声可以改善这一点。其他的流程和IRIS差不多,差别在以下几点: image encoder,IRIS用的VQVAE, 本文用的是VAE&am…...
Web前端遇到的难题:挑战与突破之路
Web前端遇到的难题:挑战与突破之路 在快速发展的互联网时代,Web前端技术作为连接用户与应用程序的桥梁,扮演着举足轻重的角色。然而,在实际开发中,Web前端开发者往往会遇到诸多难题。本文将从四个方面、五个方面、六个…...
C#防止多次注册事件
事件声明和使用部分的代码,防止多次注册事件主要通过判断事件中类型的委托实例是否为空实现 public class ReRegisterEvent {public delegate void Mydelegate(string message);private Mydelegate? mydel;public event Mydelegate Myevent{add{if (mydel null){…...
【UML用户指南】-16-对高级结构建模-构件
目录 1、概念 2、构件与接口 3、可替换性 4、组织构件 5、端口 6、内部结构 6.1、部件 6.2、连接件 7、常用建模技术 7.1、对结构类建模 7.2、对API建模 构件是系统中逻辑的并且可替换的部分,它遵循并提供对一组接口的实现。好的构件用定义良好的接口来定…...
双Token方案实现Token自动续期(基于springboot+vue前后端分离项目)
文章目录 前言一、双Token方案介绍1. 令牌类型与功能2.双Token方案的优点3.实现流程 二、具体实现1.后端实现1.1 jwt工具类1.2 响应工具类1.3 实体类1.4 过滤器1.5 controller1.6 启动类 2、前端实现2.1 登录页面2.2 index页面2.3 请求拦截器和响应拦截器 效果展示 前言 更多j…...
别太小看“静态免杀“
0x01 简述 免杀总体来说可分为两种,静态免杀/动态免杀。往往来说,我们更注重于在内部代码层面实现一些免杀技巧,但在有些时候,动态免杀静态免杀以"打组合拳"的方式效果往往会更出人所料。 当我们的程序生成后…...
SQL server 内连接 左连接 右连接 全连接 语句
在SQL Server中,连接(JOIN)操作用于从两个或多个表中检索相关数据。内连接、左连接、右连接和全连接是最常用的几种连接类型。下面详细介绍每种连接的用法和区别: 1. 内连接 (INNER JOIN) 内连接只返回两个表中满足连接条件的匹…...
k8s中的pod域名解析失败定位案例
问题描述 我在k8s中启动了一个Host网络模式的pod,这个pod的域名解析失败了。 定位步骤 敲kubectl exec -it [pod_name] -- bash进入pod后台,查看/etc/resolv.conf,发现nameserver配的有问题。这里我预期的nameserver应该使用宿主机的&…...
jingxiang制作
文章目录 jingxiang制作为什么需要jingxiang制作如何进行jingxiang制作 快照方式制作jingxiang制作命令do cker commit 快照制作jingxiang创建临时工作目录编写一个实例代码启动一个容器替换国内软件源安装编译软件源代码拷贝到容器中编译运行提交为一个jingxiang测试是否可以正…...
【数据结构】线性表之《顺序表》超详细实现
顺序表 一.数据结构1.逻辑结构2.物理结构 二.顺序表的分类1.静态顺序表2.动态顺序表 三.顺序表的实现1.创建顺序表2.初始化顺序表3.判断是否扩容4.打印顺序表5.插入操作1.头插2.尾插3.按照下标插入 6.删除操作1.头删2.尾删3.按照下标删除 7.查找数据8.修改数据9.清空顺序表10.销…...
开源模型应用落地-音乐生成模型-suno/bark深度使用-AIGC应用探索(六)
一、前言 学习音乐生成模型具有极其重要的价值。通过对音乐生成模型的深入学习,我们能够探索到音乐创作的全新边界和可能性。它不仅可以开启一扇通往无限音乐创意的大门,让我们领略到科技与艺术完美融合所带来的震撼与惊喜,还能帮助我们在音乐领域实现前所未有的突破和创新。…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
