聊一聊鸿蒙系统的短彩信业务
微生香岚
发布于 2021-9-14 18:39
浏览
0收藏
简介
短彩信业务为移动数据用户提供短信收发和彩信编解码功能。主要功能有GSM/CDMA短信收发、短信PDU(Protocol data unit,协议数据单元)编解码、Wap Push接收处理 、小区广播接收、彩信通知、 彩信编解码和SIM短信记录增删改查等。
图 1 短彩信模块架构图
短彩信模块由接口管理类、短信发送管理类、短信接收管理类,和彩信编解码工具类组成。其中:
- 接口管理类:SmsInterfaceManager 负责对外提供短信发送、SIM短信记录操作和配置相关接口,负责创建SmsSendManager 和SmsReceiveManager 对象。
- 短信发送管理类: SmsSendManager 负责listen IMS网络状态;创建GSM(GsmSmsSender) 和CDMA(CdmaSmsSender) 的短信发送器对象,并根据网络制式调度对应发送对象发送短信功能。
- 短信接收管理类: SmsReceiveManager 负责短信接收,listen来自RIL层的新短信信息;创建GSM(GsmSmsReceiveHander) 和CDMA(CdmaSmsReceiveHandler) 对象;创建SmsWapPushHandler 和SmsCellBroadcastHandler 对象。
- 彩信编解码类:负责彩信PDU的编解码处理。
目录
/base/telephony/sms_mms
├─ interfaces # 对外暴露的接口
│ └─ kits
├─ sa_profile # 启动配置文件
├─ services # 服务内部代码
│ ├─ include # 头文件目录
│ ├─ cdma # CDMA制式源文件
│ └─ gsm # GSM制式源文件
├─ test # 单元测试目录
└─ utils # 通用工具相关
约束
- 开发语言:JavaScript。
- 软件上,需要与以下服务配合使用:Telephony核心服务(core_service);依赖glib库。
- 硬件上,需要搭载的设备支持以下硬件:可以进行独立蜂窝通信的Modem以及SIM卡。
接口说明
表 1 短彩信对外提供的接口
接口名称 | 接口描述 | 所需权限 |
---|---|---|
function sendMessage(options: SendMessageOptions): void; | 发送短信,包括长短信、普通短信和数据短信。 | SystemPermission.SEND_MESSAGES |
function createMessage(pdu: Array<number>, specification: string, callback: AsyncCallback<ShortMessage>): void; | 通过pdu 创建解析ShortMessage对象 | 无 |
表 2 发送短信接口参数SendMessageOptions说明
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
slotId | number | 卡槽id | 是 |
destinationHost | string | 接收端的电话号码 | 是 |
serviceCenter | string | 短信中心服务地址 | 否 |
content | content | Array<number> | 短信内容 | 是 |
destinationPort | number | 接收端端口号 | 发送数据短信必填 |
sendCallback | AsyncCallback<ISendShortMessageCallback> | 发送结果回调 | 是 |
deliveryCallback | AsyncCallback<IDeliveryShortMessageCallback> | 送达报告回调 | 是 |
表 3 ISendShortMessageCallback类型说明
参数 | 类型 | 描述 |
---|---|---|
result | SendSmsResult | 发送结果 |
url | string | URL地址 |
isLastPart | boolean | 是否是最后一条短信 |
表 4 SendSmsResult枚举值
名称 | 值 | 描述 |
---|---|---|
SEND_SMS_SUCCESS | 0 | 发送成功 |
SEND_SMS_FAILURE_UNKNOWN | 1 | 发送失败,原因未知 |
SEND_SMS_FAILURE_RADIO_OFF | 2 | 发送失败,因为Modem关闭 |
SEND_SMS_FAILURE_SERVICE_UNAVAILABLE | 3 | 发送失败,因为网络不可用 |
表 5 IDeliveryShortMessageCallback类型说明
参数 | 类型 | 描述 |
---|---|---|
pdu | Array<number> | PDU(Protocol data unit,协议数据单元)数组 |
表 6 createMessage接口参数说明
参数 | 类型 | 描述 |
---|---|---|
pdu | Array<number> | PDU(Protocol data unit,协议数据单元)数组 |
specification | string | 协议类型(3gpp或3gpp2) |
使用说明
发送短信
以发送普通文本短信为例,主要步骤和代码如下:
-
构造SendMessageOptions对象,传入必要的参数;若关注发送结果或送达报告,需要传入sendCallback或deliveryCallback对象。
-
可以通过callback或者Promise的方式调用sendMessage接口。
-
该接口为异步接口,相关执行结果会从callback中返回。
import sms from "@ohos.telephony.sms"; let msg: SendMessageOptions = { slotId: 1, destinationHost: '12312312312', content: '这是一封短信', sendCallback: (err, data) => { if (err) { // 接口调用失败,err非空 console.error(`failed to send message because ${err.message}`); return; } // 接口调用成功,err为空 console.log(`success to send message: ${data.result}`); } } // 调用接口 sms.sendMessage(msg);
创建ShortMessage对象
以解析3gpp类型的PDU,调用createMessage为例,主要步骤和代码如下:
-
构造短信的PDU,指定协议类型为3gpp或者3gpp2。
-
可以通过callback或者Promise的方式调用createMessage接口。
-
该接口为异步接口,成功后获取ShortMessage 对象属性来得到解析后的短信息数据。
import sms from "@ohos.telephony.sms"; let pdu = [80, 80, 80]; // 这里只是表示是短信PDU,并非真实短信 let specification = "3gpp"; // 调用接口【callback方式】 sms.createMessage(pdu, specification, (err, value) => { if (err) { // 接口调用失败,err非空 console.error(`failed to createMessage because ${err.message}`); return; } // 接口调用成功,err为空 console.log(`success to createMessage: ${value}`); }); // 调用接口【Promise方式】 let promise = sms.createMessage(pdu, specification); promise.then((value) => { // 接口调用成功,此处可以实现成功场景分支代码。 console.log(`success to createMessage: ${value}`); }).catch((err) => { // 接口调用失败,此处可以实现失败场景分支代码。 console.error(`failed to createMessage because ${err.message}`); });
相关仓
电话服务子系统
telephony_sms_mms
telephony_core_service
分类
telephony_sms_mms-master.zip 256.54K 10次下载
已于2021-9-14 18:39:13修改
赞
收藏
回复
回复
相关推荐