概述
本示例展示了电话服务中发送短信的功能。
样例展示
涉及OpenHarmony技术特性
网络通信
难度级别
中级
基础信息
使用@ohos.telephony.sms接口展示了电话服务中发送短信的功能。
效果预览
使用说明:
1.首页点击创建联系人,弹框输入联系人姓名和电话,点击确定按钮后,联系人列表中添加该联系人;
2.点击管理,该按钮变成取消,联系人列表出现删除x按钮,点击x按钮可删除联系人,点击取消,按钮变成管理;
3.联系人列表中每个联系人右侧有发送短信图标按钮,点击该图标按钮跳转到发送短信页面;
4.发送短信页面,输入短信点击向上箭头的发送按钮,可以发送短信;
5.需授予短信发送权限且插入SIM卡才可成功发送短信,有预置短信内容,每次退出应用数据会清空,未添加存储功能,发送短信为默认卡发送。
工程目录
entry/src/main/ets/
|---pages
| |---Index.ets // 首页
| |---SendMessage.ets / 发送短信页
|---common
| |---AddDialog.ets // 添加联系人
| |---TitleBar.ets // title
|---model
| |---Contact.ets // 联系人数据结构
| |---DataSources.ets // 懒加载数据
| |---DataTimeUtil.ets // 日期工具
| |---Logger.ts // 日志工具
| |---Message.ets // 短信数据结构
| |---PermissionUtils.ets // 权限信息
| |---SmsModel.ets // 封装短信类
具体实现
发送短信功能在SmsModel中 :
/*
* Copyright (c) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import sms from '@ohos.telephony.sms'
import Logger from '../model/Logger'
const TAG: string = `[SmsModel]`
export default class SmsModel {
async createMessage() {
const specification = '3gpp'
const pdu = [0x08, 0x91] // 以数组的形式显示协议数据单元(PDU),类型为number
const shortMessage = await sms.createMessage(pdu, specification)
Logger.info(`${TAG}, createMessageCallback: shortMessage = ${JSON.stringify(shortMessage)}`)
return shortMessage
}
sendMessage(slotId, content, destinationHost, serviceCenter, destinationPort, handleSend, handleDelivery) {
Logger.info(`${TAG}, sendMessage start ${slotId} ${content} ${destinationHost} ${serviceCenter} ${destinationPort}`)
const options =
{
slotId: slotId,
content: content,
destinationHost: destinationHost,
serviceCenter: serviceCenter,
destinationPort: destinationPort,
sendCallback(err, data) {
Logger.info(`${TAG}, sendCallback: data = ${JSON.stringify(data)} err = ${JSON.stringify(err)}`)
handleSend(err, data)
},
deliveryCallback(err, data) {
Logger.info(`${TAG}, deliveryCallback: data = ${JSON.stringify(data)} err = ${JSON.stringify(err)}`)
handleDelivery(err, data)
}
}
sms.sendMessage(options)
Logger.info(`${TAG}, sendMessage end`)
}
async getDefaultSmsSlotId() {
const defaultSmsSlotId = await sms.getDefaultSmsSlotId()
Logger.info(`${TAG}, getDefaultSmsSlotId: defaultSmsSlotId = ${defaultSmsSlotId}`)
return defaultSmsSlotId
}
async setSmscAddr(slotId, smscAddr) {
const serviceCenter = await sms.setSmscAddr(slotId, smscAddr)
Logger.info(`${TAG}, setSmscAddr: serviceCenter = ${JSON.stringify(serviceCenter)}`)
return serviceCenter
}
async getSmscAddr(slotId) {
const serviceCenter = await sms.getSmscAddr(slotId)
Logger.info(`${TAG}, getSmscAddr: serviceCenter = ${JSON.stringify(serviceCenter)}`)
return serviceCenter
}
}
发送短信:发送短信首先需要使用createMessage方法创建短信实例,然后获取基本参数,getDefaultSmsSlotId可以获取发短信默认卡槽id,getSmscAddr获取短信发送地址,然后调用sms.sendMessage方法发送短信。
依赖
不涉及。
约束与限制
1.本示例仅支持在标准系统上运行;
2.本示例需要插入SIM卡,目前该功能仅支持部分机型;
3.本示例已适配API version 9版本SDK,版本号:3.2.11.9;
4.本示例涉及使用系统接口:getSmscAddr(),需要手动替换Full SDK 才能编译通过
5.本示例需要使用DevEco Studio 3.1 Beta2 (Build Version: 3.1.0.400, built on April 7, 2023)及以上版本才可编译运行;
6.本示例所配置的权限ohos.permission.SEND_MESSAGES、ohos.permission.SET_TELEPHONY_STATE、ohos.permission.GET_TELEPHONY_STATE为system_basic级别(相关权限级别可通过[权限定义列表] 查看),需要手动配置对应级别的权限签名(具体操作可查看自动化签名方案;
7.本示例为预置应用,无需用户授权弹窗,授权方式为预置授权。
下载
如需单独下载本工程,执行如下命令:
git init
git config core.sparsecheckout true
echo code/BasicFeature/Telephony/Message/ > .git/info/sparse-checkout
git remote add origin https://gitee.com/openharmony/applications_app_samples.git
gitpull origin master
写在最后
有很多小伙伴不知道该从哪里开始学习鸿蒙开发技术?也不知道鸿蒙开发的知识点重点掌握的又有哪些?自学时频繁踩坑,导致浪费大量时间。结果还是一知半解。所以有一份实用的鸿蒙(HarmonyOS NEXT)全栈开发资料用来跟着学习是非常有必要的。