鸿蒙HarmonyOS开发:拨打电话、短信服务、网络搜索、蜂窝数据、SIM卡管理、observer订阅管理

文章目录

      • 一、call模块(拨打电话)
        • 1、使用makeCall拨打电话
        • 2、获取当前通话状态
        • 3、判断是否存在通话
        • 4、检查当前设备是否具备语音通话能力
      • 二、sms模块(短信服务)
        • 1、创建短信
        • 2、发送短信
      • 三、radio模块(网络搜索)
        • 1、获取网络状态
      • 四、data模块(蜂窝数据)
        • 1、检查蜂窝数据业务是否启用
        • 2、获取蜂窝数据业务的上下行状态
      • 五、sim模块(SIM卡管理)
      • 六、observer订阅管理
        • 1、网络状态变化
        • 2、信号状态变化
        • 3、通话状态变化
        • 4、蜂窝数据链路连接状态
        • 5、sim状态更改

一、call模块(拨打电话)

系统应用可以直接拨打电话,在应用界面显示通话;三方应用可以拉起系统电话应用,跳转至拨号界面,从而实现拨打电话的功能。除此之外,应用还可以通过call模块,实现格式化电话号码、判断是否紧急号码等功能。

1、使用makeCall拨打电话
  • 导入call和observer模块。

  • 调用hasVoiceCapability,确认当前设备是否支持拨号。

  • 调用makeCall接口,跳转到拨号界面并显示待拨号的号码。

  • 订阅通话业务状态变化。

 // import需要的模块import { call, observer } from '@kit.TelephonyKit';import { BusinessError } from '@kit.BasicServicesKit';// 调用查询能力接口let isSupport = call.hasVoiceCapability();if (isSupport) {// 如果设备支持呼叫能力,则继续跳转到拨号界面,并显示拨号的号码call.makeCall("13xxxx", (err: BusinessError) => {if (!err) {console.log("make call success.");} else {console.log("make call fail, err is:" + JSON.stringify(err));}});// 订阅通话业务状态变化(可选)class SlotId {slotId: number = 0}class CallStateCallback {state: call.CallState = call.CallState.CALL_STATE_UNKNOWN;number: string = "";}let slotId: SlotId = {slotId: 0}observer.on("callStateChange", slotId, (data: CallStateCallback) => {console.log("call state change, data is:" + JSON.stringify(data));});}
2、获取当前通话状态
let callState: call.CallState = call.getCallStateSync();
console.log(`the call state is:` + callState);

返回值:

名称说明
CALL_STATE_UNKNOWN-1无效状态,当获取呼叫状态失败时返回。
CALL_STATE_IDLE0表示没有正在进行的呼叫。
CALL_STATE_RINGING1表示来电正在振铃或等待。
CALL_STATE_OFFHOOK2表示至少有一个呼叫处于拨号、通话中或呼叫保持状态,并且没有新的来电振铃或等待。
CALL_STATE_ANSWERED3表示来电已经接听。
3、判断是否存在通话
let hasCall: boolean = call.hasCallSync();
console.log(`hasCallSync success, has call is ` + hasCall);

返回值:

类型说明
boolean返回判断是否存在通话。返回true表示当前存在通话,false表示当前不存在通话。
4、检查当前设备是否具备语音通话能力
let result: boolean = call.hasVoiceCapability();
console.log(`hasVoiceCapability: ${JSON.stringify(result)}`);

返回值:

类型说明
boolean返回true表示设备具备语音通话能力,返回false表示设备不具备语音通话能力。

二、sms模块(短信服务)

应用可以实现创建、发送短信消息的功能。除此之外,应用还可以实现获取、设置短信服务中心地址,和检查当前设备是否具备短信发送和接收能力等功能。

1、创建短信
import { sms } from '@kit.TelephonyKit';
import { BusinessError } from '@kit.BasicServicesKit';const specification: string = '3gpp';
// 以数组的形式显示协议数据单元(PDU),类型为number。
const pdu: Array<number> = [0x01, 0x00, 0x05, 0x81, 0x01, 0x80, 0xF6, 0x00, 0x00, 0x05, 0xE8, 0x32, 0x9B, 0xFD, 0x06];
sms.createMessage(pdu, specification).then((data: sms.ShortMessage) => {console.log(`createMessage success, promise: data->${JSON.stringify(data)}`);
}).catch((err: BusinessError) => {console.error(`createMessage failed, promise: err->${JSON.stringify(err)}`);
});
2、发送短信
import { sms } from '@kit.TelephonyKit';
import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';// 短信发送结果回调
let sendCallback: AsyncCallback<sms.ISendShortMessageCallback> = (err: BusinessError, data: sms.ISendShortMessageCallback) => {console.log(`sendCallback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`);
};// 短信送达结果回调
let deliveryCallback: AsyncCallback<sms.IDeliveryShortMessageCallback> = (err: BusinessError, data: sms.IDeliveryShortMessageCallback) => {console.log(`deliveryCallback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`);
};// 发送短信的参数
let options: sms.SendMessageOptions = {slotId: 0,content: '短信内容',destinationHost: '+861xxxxxxxxxx',serviceCenter: '+861xxxxxxxxxx',destinationPort: 1000,sendCallback: sendCallback,deliveryCallback: deliveryCallback
};// 使用Promise异步回调
let promise = sms.sendShortMessage(options);
promise.then(() => {console.log(`sendShortMessage success`);
}).catch((err: BusinessError) => {console.error(`sendShortMessage failed, promise: err->${JSON.stringify(err)}`);
});

发送短信的参数和回调

名称类型必填说明
slotIdnumber用于发送短信的SIM卡槽ID:
- 0:卡槽1
- 1:卡槽2
destinationHoststring短信的发送地址。
contentstring,Array如果内容是字符串,则这是一条文本短信。如果内容是字节数组,则这是一条数据短信。
serviceCenterstring短信中心地址。默认使用SIM卡中的短信中心地址。
destinationPortnumber如果发送数据消息,destinationPort 是必需的。否则是可选的。
sendCallbackAsyncCallback短信发送结果回调,返回短信发送的结果,发送数据短信时,此项必填。
deliveryCallbackAsyncCallback短信送达结果回调,返回短信递送报告,发送数据短信时,此项必填。

三、radio模块(网络搜索)

应用可以调用API获取当前注册网络名称、网络服务状态以及信号强度相关信息。

1、获取网络状态
import { BusinessError } from '@kit.BasicServicesKit';let slotId: number = 0;
radio.getNetworkState(slotId).then((data: radio.NetworkState) => {console.log(`getNetworkState success, promise: data->${JSON.stringify(data)}`);
}).catch((err: BusinessError) => {console.error(`getNetworkState failed, promise: err->${JSON.stringify(err)}`);
});

返回值:

类型说明
NetworkState返回网络状态。

网络注册状态。

名称类型必填说明
longOperatorNamestring注册网络的长运营商名称。
shortOperatorNamestring注册网络的短运营商名称。
plmnNumericstring注册网络的PLMN码。
isRoamingboolean是否处于漫游状态。
regStateRegState设备的网络注册状态。
cfgTech8RadioTechnology设备的无线接入技术。
nsaStateNsaState设备的NSA网络注册状态。
isCaActivebooleanCA的状态。
isEmergencyboolean此设备是否只允许拨打紧急呼叫。

四、data模块(蜂窝数据)

蜂窝数据是无线通讯技术标准的一种,从数据的传输到交换都采用分组技术(Packet Switch),能够为移动设备提供话音、数据、视频图像等业务,经常用于支持用户在智能设备上使用应用程序,以及在移动网络上浏览网页。

1、检查蜂窝数据业务是否启用
import { data } from '@kit.TelephonyKit';
import { BusinessError } from '@kit.BasicServicesKit';data.isCellularDataEnabled().then((contextData: boolean) => {console.log(`isCellularDataEnabled success, promise: contextData->${JSON.stringify(contextData)}`);
}).catch((err: BusinessError) => {console.error(`isCellularDataEnabled fail, promise: err->${JSON.stringify(err)}`);
});

返回值:

类型说明
booleantrue:蜂窝数据业务已启用。false:蜂窝数据业务已禁用。
2、获取蜂窝数据业务的上下行状态
import { data } from '@kit.TelephonyKit';
import { BusinessError } from '@kit.BasicServicesKit';data.getCellularDataFlowType().then((contextData: data.DataFlowType) => {console.log(`getCellularDataFlowType success, promise: contextData->${JSON.stringify(contextData)}`);
}).catch((err: BusinessError) => {console.error(`getCellularDataFlowType fail, promise: err->${JSON.stringify(err)}`);
});

返回值:

类型说明
DataFlowType蜂窝数据业务的上下行状态。

蜂窝数据流类型。

名称说明
DATA_FLOW_TYPE_NONE0表示没有上行或下行数据。
DATA_FLOW_TYPE_DOWN1表示只有下行数据。
DATA_FLOW_TYPE_UP2表示只有上行数据。
DATA_FLOW_TYPE_UP_DOWN3表示有上下行数据。
DATA_FLOW_TYPE_DORMANT4表示没有上下行数据,底层链路处于休眠状态。

五、sim模块(SIM卡管理)

应用可以调用API获取SIM卡相关信息,如服务提供商、ISO(International Organization for Standardization,国际标准化组织)国家码、归属PLMN(Public Land Mobile Network,公共陆地移动网络)号等。

六、observer订阅管理

提供订阅管理功能,可以订阅/取消订阅的事件包括:网络状态变化、信号状态变化、通话状态变化、蜂窝数据链路连接状态、蜂窝数据业务的上下行数据流状态、SIM状态变化。

1、网络状态变化
observer.on('networkStateChange', (data: observer.NetworkState) => {console.log("on networkStateChange, data:" + JSON.stringify(data));
});
2、信号状态变化
import { radio } from '@kit.TelephonyKit';observer.on('signalInfoChange', (data: Array<radio.SignalInformation>) => {console.log("on signalInfoChange, data:" + JSON.stringify(data));
});
3、通话状态变化
observer.on('callStateChange', (data: observer.CallStateInfo) => {console.log("on callStateChange, data:" + JSON.stringify(data));
});
4、蜂窝数据链路连接状态
observer.on('cellularDataConnectionStateChange', (data: observer.DataConnectionStateInfo) => {console.log("on cellularDataConnectionStateChange, data:" + JSON.stringify(data));
});
5、sim状态更改
observer.on('simStateChange', (data: observer.SimStateData) => {console.log("on simStateChange, data:" + JSON.stringify(data));
});

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/501111.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TVS二极管选型【EMC】

TVS器件并联在电路中&#xff0c;当电路正常工作时&#xff0c;他处于截止状态&#xff08;高阻态&#xff09;&#xff0c;不影响线路正常工作&#xff0c;当线路处于异常过压并达到其击穿电压时&#xff0c;他迅速由高阻态变为低阻态&#xff0c;给瞬间电流提供一个低阻抗导通…

sqlalchemy-access库操作MS Access

因目前项目中数据处理的量稍大&#xff0c;为了方便和业务进行交互&#xff0c;对数据的加工和处理放到微软桌面数据库MS Access中。然后有些地方通过 Python 来操作 MS Access 数据库&#xff0c;用到 sqlalchemy-access库。本文对操作的要点做简单的描述。 之前写过一篇 Pyt…

UnityRenderStreaming使用记录(三)

测试UnityRenderStreaming在Ubuntu24.04.1LTS上的表现 先放上运行图操作系统 Ubuntu24.04.1LTSUnity测试工程环境相关修改遇到的问题 先放上运行图 操作系统 Ubuntu24.04.1LTS 系统下载地址 https://cn.ubuntu.com/download/desktop安装UnityHub https://blog.csdn.net/AWNUXC…

==和===的区别,被坑的一天

在 JavaScript 中&#xff0c; 和 都用于比较两个值&#xff0c;但它们有一个重要的区别&#xff1a; 1. (宽松相等运算符) 进行比较时&#xff0c;会 自动类型转换&#xff08;也叫做强制类型转换&#xff09;&#xff0c;即如果比较的两个值的类型不同&#xff0c;JavaScr…

Git的使用流程(详细教程)

目录 01.Git是什么&#xff1f; 1.1 Git简介 1.2 SVN与Git的最主要的区别 1.3 GIt主要特点 02.Git是干什么的&#xff1f; 2.1.Git概念汇总 2.2 工作区/暂存区/仓库 2.3 Git使用流程 03.Git的安装配置 3.1 Git的配置文件 3.2 配置-初始化用户 3.3 Git可视化…

使用Docker部署最新版JupyterHub

拉取镜像 docker pull jupyterhub/jupyterhub:latest启动镜像 docker run -d -p 8000:8000 --name jupyterhub jupyterhub/jupyterhub:latest jupyterhub进入容器 docker exec -it jupyterhub bash生成jupyterhub的配置文件 jupyterhub --generate-config# 有需要可以安装中…

liunx下载gitlab

1.地址&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ 安装 postfix 并启动 yum install postfix systemctl start postfix systemctl enable postfix ssh服务启动 systemctl enable sshd systemctl start sshd开放 ssh 以及 http 服务&#xff0c…

【AI大模型】深入GPT-2模型细节:揭秘其卓越性能的秘密

目录 &#x1f354; GPT2的架构 &#x1f354; GPT2模型的细节 2.1 模型过程 2.2 GPT2工作细节探究 &#x1f354; 小结 学习目标 掌握GPT2的架构掌握GPT2的训练任务和模型细节 &#x1f354; GPT2的架构 从模型架构上看, GPT2并没有特别新颖的架构, 它和只带有解码器模块…

oceanbase集群访问异常问题处理

1.报错现象 2.问题排查 检查obproxy状态发现为不可用状态 重启obproxy 依次重启Obproxy集群 观察任务状态 重启完成 Obproxy状态正常 3.验证登录 登录成功

Echarts+vue电商平台数据可视化——webSocket改造项目

websocket的基本使用&#xff0c;用于测试前端能否正常获取到后台数据 后台代码编写&#xff1a; const path require("path"); const fileUtils require("../utils/file_utils"); const WebSocket require("ws"); // 创建WebSocket服务端的…

【数据结构】双向循环链表的使用

双向循环链表的使用 1.双向循环链表节点设计2.初始化双向循环链表-->定义结构体变量 创建头节点&#xff08;1&#xff09;示例代码&#xff1a;&#xff08;2&#xff09;图示 3.双向循环链表节点头插&#xff08;1&#xff09;示例代码&#xff1a;&#xff08;2&#xff…

【深度学习】卷积网络代码实战ResNet

ResNet (Residual Network) 是由微软研究院的何凯明等人在2015年提出的一种深度卷积神经网络结构。ResNet的设计目标是解决深层网络训练中的梯度消失和梯度爆炸问题&#xff0c;进一步提高网络的表现。下面是一个ResNet模型实现&#xff0c;使用PyTorch框架来展示如何实现基本的…

【51项目】51单片机自制小霸王游戏机

视频演示效果&#xff1a; 纳新作品——小霸王游戏机 目录&#xff1a; 目录 视频演示效果&#xff1a; 目录&#xff1a; 前言&#xff1a; 一、连接方式&#xff1a; 1.1 控制引脚 1.2. 显示模块 1.3. 定时器 1.4. 游戏逻辑与硬件结合 1.5. 中断处理 二、源码分析&#xff1a…

2024/12/29 黄冈师范学院计算机学院网络工程《路由期末复习作业一》

一、选择题 1.某公司为其一些远程小站点预留了网段 172.29.100.0/26&#xff0c;每一个站点有10个IP设备接到网络&#xff0c;下面那个VLSM掩码能够为该需求提供最小数量的主机数目 &#xff08; &#xff09; A./27 B./28 C./29 D./30 -首先审题我们需要搞清楚站点与网…

【OpenCV】使用Python和OpenCV实现火焰检测

1、 项目源码和结构&#xff08;转&#xff09; https://github.com/mushfiq1998/fire-detection-python-opencv 2、 运行环境 # 安装playsound&#xff1a;用于播放报警声音 pip install playsound # 安装opencv-python&#xff1a;cv2用于图像和视频处理&#xff0c;特别是…

Vue2: table加载树形数据的踩坑记录

table中需要加载树形数据,如图: 官网给了两个例子,且每个例子中的tree-props都是这么写的: :tree-props="{children: children, hasChildren: hasChildren}" 给我一种错觉,以为数据结构中要同时指定children和hasChildren字段,然而,在非懒加载模式下,数据结…

深度学习模型预测值集中在某一个值

深度学习模型&#xff0c;训练过程中&#xff0c;经常遇到预测的结果集中在某个值&#xff0c;而且在学习的过程中会变&#xff0c;样例如下。 主要有如下解决方案 1、更换relu ->tanh 或者其他激活函数 2、更改随机种子&#xff0c;估计是没有初始化好&#xff0c;或者调…

图书项目:整合SSM

步骤&#xff1a; pom文件&#xff1a;导包&#xff0c;写入静态资源导出配置&#xff0c;连接数据库 建包&#xff1a;controller dao/mapper pojo service 配置文件&#xff1a;mybatis-config.xml applicationContext.xml&#xff08;Spring的配置文件&#xff09; datab…

javacript中function (res) {}与箭头函数表达式(res) =>{}的区别

javacript中function (res) {}与(res) &#xff1e;{}的区别 function (res) {} 代码演示 let shape {name:长方形,say:function(){console.log(我是this.name)setTimeout(function(){console.log(3秒后输出我是: this.name); //this.name为undefined}, 3000)} }shape.sa…

Docker安装(Docker Engine安装)

一、Docker Engine和Desktop区别 Docker Engine 核心组件&#xff1a;Docker Engine是Docker的核心运行时引擎&#xff0c;负责构建、运行和管理容器。它包括守护进程&#xff08;dockerd&#xff09;、API和命令行工具客户端&#xff08;docker&#xff09;。适用环境&#…